afronden en preciese getallen

Status
Niet open voor verdere reacties.

famlam

Gebruiker
Lid geworden
15 okt 2008
Berichten
416
Hoe kan ik afronden op het totaal aantal cijfers dat voorkomt?
Bijvoorbeeld:
math.round(0.23456789,2) levert nu 0.23 op.
math.round(123.456789,4) levert nu 123.4568 op.(=7 cijfers)
Hoe kan ik ervoor zorgen dat deze afgerond worden op het aantal cijfers i.p.v. het aantal decimalen, dus dat er bij de tweede als uitkomst 123.5 uitkomt (=4 cijfers)

Verder had ik een andere vraag:
Hoe kan je een getal in nog meer decimalen opslaan in een variabele dan in het "dim x as decimal"-type? Want bijvoorbeeld heb ik staan dim pi as decimal = 3.1415926535897931, maar ik zou liever hebben dat hij pi als 3.1415926535897932384626434 (9 decimalen meer) opslaat. is dit mogelijk?
 
PI staat gewoon onder:

Code:
System.Math.PI

Maar van die andere heb ik geen idee...
 
zoiets?

Code:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Label1.Text = AantalAfronden("123.456789,445346", 7)

    End Sub

    Private Function AantalAfronden(ByVal Waarde As String, ByVal Afronden As Integer) As Decimal

        Waarde = Waarde.Replace(".", Nothing).Replace(",", Nothing)

        Dim AantalGetallen As Integer = Waarde.Length
        Dim Nummer As Int64 = CDec(Waarde)

        Return Math.Round(Nummer / (10 ^ (AantalGetallen - Afronden)))

    End Function

End Class
 
Laatst bewerkt:
@ Pizaria: Inderdaad! Bedankt!

PI staat gewoon onder:

Code:
System.Math.PI

Maar van die andere heb ik geen idee...

pi was als voorbeeld. Ik heb ook wel eens getallen als 141.2152958766851684348358589..., en daar bestaat geen standaardfunctie voor.

Maar verder: math.pi levert ook niets meer op als 3.1415926535897931, en dus blijft mijn vraag ook voor pi bestaan: hoe kan ik pi in meer decimalen in een variabele opslaan?
 
Kan je niet beter een functie maken die pi berekend? Dan hoef je nix op te slaan en word het aantal decimalen niet beperkt.

Natuurlijk geraak je niet voorbei het feit dat zelf als je het zo berekend je getal afgerond word, doordat er nu eenmaal een limiet aan de nauwkeurigheid van een decimal zit.

Je kan wel een biginteger class gebruiken zoals deze: http://www.codeproject.com/KB/cs/biginteger.aspx

Waarom moet die eigenlijk zo nauwkeurig zijn?
 
Kan je niet beter een functie maken die pi berekend? Dan hoef je nix op te slaan en word het aantal decimalen niet beperkt.

Natuurlijk geraak je niet voorbei het feit dat zelf als je het zo berekend je getal afgerond word, doordat er nu eenmaal een limiet aan de nauwkeurigheid van een decimal zit.

Je kan wel een biginteger class gebruiken zoals deze: http://www.codeproject.com/KB/cs/biginteger.aspx

Waarom moet die eigenlijk zo nauwkeurig zijn?

Berekenen? Math.Sqrt(Math.Sqrt(2143/22)) levert het ook maar in een zeer klein aantal decimalen op en was nog onprecies ook!!! Het negende decimaal ging al fout! En dit is de beste berekening die ik vond!

Die bigintegerclass die je noemde gaat over VC# ipv VBasic en is dus niet te gebruiken

Waarom pi zo nauwkeurig? omdat ik een wiskundeprogrammaatje maak, en daar staat het nogal slordig als pi al zo fout is. Met de pi die ik nu gebruik krijg ik al een fout in het achtste getal dat voorkomt (bij hogere getallen)!!! (vb: als de invoer 99999999 is dan is de uitkomst 17.192699... terwijl het 17.192697... zou moeten zijn!) Ik heb al mijn andere formules van de berekening al getest, en die kloppen allemaal! het gaat alleen fout wanneer ik pi erin 'meng'.
 
Je kan een c#.Net class ook in vb8 gebruiken hoor... Nadat je hem gebruild hebt moet je hem gewoon als reference toevoegen bij je vb.net project :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan