2010-12-10 15 views
0

In vb.net Je veux retirer le nombre de pixels, la décimale, les 2 premières décimales et les 3èmes et 4èmes décimales. J'ai tourné autour de la solution mais pas tout à fait là.VB.net: Affichage de certaines parties d'une valeur décimale

Le code que j'ai jusqu'à présent est ici:

Dim wholenumber As Decimal 
    wholenumber = 15.1234 

    ' Displays 15 
    MsgBox("The whole number is " & Math.Floor(wholenumber)) 
    ' Displays .1234 
    MsgBox("The decimals are " & wholenumber - Math.Floor(wholenumber)) 
    ' Displays .12 
    MsgBox("The first 2 decimals are" & ?????) 
    ' Displays .0034 
    MsgBox("The third and fourth decimals are " & ????) 

Répondre

2

Vous voulez utiliser un spécificateur de format lorsque vous appelez .ToString() sur vos valeurs numériques (qui est actuellement appelé implicitement dans votre code, mais devrait probablement être explicite).

Par exemple, wholenumber.ToString("##.###") doit renvoyer "15.123".

Plus d'informations peuvent être trouvées here, et des tonnes d'informations et des exemples peuvent être trouvés en recherchant quelque chose comme "formatage de chaîne. Net".

+0

J'ai commencé à l'origine avec wholenumber.ToString mais j'ai trouvé qu'il renvoyait .119999999999 et .0034000000000000096. Pour mes fins, ce n'est pas trop un problème, mais je pense que leur pourrait être un meilleur moyen. Merci pour le conseil néanmoins! –

+1

@ user538149: Tout dépend de la chaîne de format dans ce cas. Maintenant, si vous voulez arrondir la valeur réelle, les autres réponses fournies seront plus utiles. Mais si vous parlez juste de _displaying_ la valeur à des décimales spécifiées, la mise en forme de chaîne est la voie à suivre. – David

+0

+1 et activer Option Strict pour que VB ne convertit pas silencieusement, c'est dangereux. – MarkJ

0
' Displays .12 
Console.Writeline("The first 2 decimals are " & _ 
    decimal.Round(wholenumber, 2) - decimal.Round(wholenumber, 0)) 
' Displays .0034 
Console.Writeline("The third and fourth decimals are " & _ 
    (wholenumber - decimal.Round(wholenumber, 2))) 
0

Si vous voulez faire preuve de créativité et de le faire tout en utilisant des opérations simples de base, appelant CInt (wholenumber) est le même que Math.floor(). Vous pouvez obtenir tout ce dont vous avez besoin avec une combinaison de tronquer et déplacer la décimale en multipliant les puissances de 10.

wholenumber = 15.1234 

La partie entière du nombre = CInt(wholenumber) = 15

Les décimales sont = wholenumber - CInt(wholenumber) = 15,1234-15 = = 0,1234

Les 2 premières décimales sont = Cint((wholenumber - CInt(wholenumber)) * 100)/100 = CInt (0,1234 * 100)/100 == 12/100 == 0,12

Les nombres décimaux sont 3-4th = wholenumber - CInt(wholenumber*100)/100 = 15,1234 - CInt (1512,34)/100 == 15,1234 à 15,12 == 0,0034

etc ...

0

Ceci est du haut de ma tête, mais vous devriez être en mesure d'utiliser les fonctions de manipulation de chaîne pour obtenir les décimales. Quelque chose comme ça ...

Dim wholeNumber As Decimal 
Dim decimalPosition As Integer 

wholenumber = 15.1234 
decimalPosition = wholeNumber.ToString().IndexOf("."c) 

MsgBox("The first 2 decimals are" & wholeNumber.ToString().Substring(decimalPosition + 1, 2)) 
MsgBox("The third and fourth decimals are " & wholeNumber.ToString().Substring(decimalPosition + 3, 2))