2009-12-08 27 views
0

Je souhaite créer une chaîne à partir d'un nombre décimal, sans le séparateur décimal;C# decimal tostring format

1 500,00 devrait devenir "150000".

Quel est le format approprié pour cela? (Sans chaîne.réplace, et.)

Merci!

+1

Ceci est une requête étrange; pourquoi fais-tu ça? – jason

+0

Un fournisseur de services de paiement exige que les montants soient formatés en cents. Donc, il n'est pas permis d'avoir un séparateur. – joop

+4

Si vous en avez besoin formaté en centimes, il suffit de multiplier par '100' et faire avec. La façon dont votre question est formulée, cela semble beaucoup plus général qu'elle ne devrait l'être - par ex. il est évident d'après ce que vous avez dit que '1.500.001' devrait être produit sous la forme' 150000', mais votre question exige qu'il soit '1500001'. –

Répondre

0
decimal value = 1500; 
Console.WriteLine((value * 100).ToString("0")); 
+0

Cela retournera 1500.00 pas 150000 ... – joop

+0

@joop: 1500 * 100 = 150000 .... –

+0

Et s'il y a plus de décimales après la décimale? – jason

7

essayer:

decimal d = 1500m; 
    string s = (100*d).ToString("0"); 
+0

Et s'il y a plus de décimales après la décimale? – jason

+0

Ils n'apparaîtront pas à cause de l'option de format 0. –

+1

Voulez-vous les valeurs décimales supplémentaires? –

2

Deux solutions:

  • Créer votre propre NumberFormatInfo et CultureInfo et le transmettre à ToString.
  • Multiplier le nombre par 100, puis utilisez .ToString("0")
+1

Je ne pense pas que la chose NumberFormatInfo fonctionnera. .NET n'autorise pas de séparateur décimal vide. –

+0

Scott P a raison; 'NumberFormatInfo.NumberDecimalSeparator = String.Empty' va être lancé. – jason

+1

Je suppose que c'est parce qu'il est aussi utilisé pour l'analyse, et c'est un peu difficile de trouver une sous-chaîne vide lors de l'analyse ... –

1

Quel est le problème avec String.Replace de toute façon? C'est simple et précis:

CultureInfo info = CultureInfo.GetCultureInfo("en-US"); 

decimal m = 1500.00m; 
string s = m.ToString("G", info).Replace(".", String.Empty)); 
Console.WriteLine(s); // outputs "150000" 

m = 1500.0m; 
string s = m.ToString("G", info).Replace(".", String.Empty)); 
Console.WriteLine(s); // outputs "15000" 

m = 1500.000m; 
string s = m.ToString("G", info).Replace(".", String.Empty)); 
Console.WriteLine(s); // outputs "1500000" 


m = 1500.001m; 
string s = m.ToString("G", info).Replace(".", String.Empty)); 
Console.WriteLine(s); // outputs "1500001" 

m = 1500.00000000000000000000001m; 
string s = m.ToString("G", info).Replace(".", String.Empty)); 
Console.WriteLine(s); // outputs "150000000000000000000000001" 
+1

'". "' Devrait être 'info.NumberFormat.NumberDecimalSeparator'? –

+0

Eh, ça pourrait être mais nous savons que 'NumberFormat.NumberDecimalSeparator' est' .' quand 'info' est la culture représentée par' en-US'. – jason