2010-12-06 6 views
1

Je me sens comme c'est une question très noob .. mais je ne peux pas obtenir la bonne déclaration pour cela.Obtenir des caractères derrière le point dans un double

À des fins d'affichage, je veux diviser un double en deux: la partie avant le point et les deux premiers chiffres après le point. J'en ai besoin comme string. Langue cible: C#.

Par exemple: 2345.1234 devient "2345" et "12"

Je sais comment obtenir la partie avant le point, qui est tout simplement:

Math.Floor(value).ToString() 

... mais quelle est la bonne façon d'obtenir la partie " derrière le point "? Il doit y avoir une belle façon de le faire de manière simple ...

Je ne peux pas penser à autre chose alors:

Math.Round(100 * (value - Math.Floor(value))).ToString("00"); 

Je suis sûr qu'il ya une meilleure façon, mais je Je ne peux pas y penser. N'importe qui?

+2

Il y a certainement un moyen * meilleur * puisque la technique que vous avez trouvée n'est pas * correcte *. Il échoue si le double est négatif, par exemple. –

+0

C'est vrai, mais j'ai oublié de mentionner que la valeur représente le prix d'un produit, ce qui est généralement positif, malheureusement :) – Dirk

+2

Si vous traitez avec de l'argent, vous devriez probablement envisager d'utiliser le type décimal. Cela ne vous aidera probablement pas à obtenir la partie fractionnaire du nombre, mais cela aidera à garder votre argent droit! – wageoghe

Répondre

5

expressions régulières (regex) est probablement vous meilleur pari, mais en utilisant l'opérateur mod peut être une autre solution intéressante ...

stuffToTheRight = value % 1 

Vive.

+1

C'est ce que je cherchais. Je n'ai pas codé pendant quelques années et je savais qu'il y avait ce "quelque chose". Je voulais dire ce bon vieux opérateur de mod :) – Dirk

+1

pour obtenir deux chiffres utiliser: '(int) (stuffToTheRight * 100)' – Commodore63

0
use regex ".[0-9][0-9]" 
+1

Attention: cela ne fonctionnera pas si vous ne définissez pas la culture pour 'ToString()' et la culture par défaut a une virgule comme séparateur décimal. – svick

+1

Doit être '" \. [0-9] [0-9] "' car "." correspond à n'importe quel personnage. – Commodore63

4
// 
//Use the Fixed point formatting option. You might have a bit more work to do 
//if you need to handle cases where "dot" is not the decimal separator. 
// 
string s = value.ToString("F2", CultureInfo.InvariantCulture); 
var values = s.Split("."); 
string v1 = values[0]; 
string v2 = values[1]; 

Voir ce lien pour plus sur le formatage: http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

Voici un code non testé qui tente de prendre la culture actuelle en compte:

// 
//Use the Fixed point formatting option. 
// 
string s = value.ToString("F2", CultureInfo.CurrentCulture); 
var values = s.Split(CultureInfo.NumberFormat.NumberDecimalSeparator); 
string v1 = values[0]; 
string v2 = values[1]; 
+1

+1 pour prendre en compte les paramètres régionaux, ce qui est étonnamment rare. –

0

En une ligne, il sera:
string[] vals = value.ToString("f2").Split(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator.ToCharArray());

vals[0]: avant le point.
vals[1]: après le point.

Questions connexes