文字列をお金にフォーマットする方法


82

のような文字列があり000000000100、1.00に変換したいのですが、その逆も同様です。

先頭のゼロは削除され、最後の2桁は小数です。

私はより多くの例を挙げます:

000000001000 <=> 10.00
000000001005 <=> 10.05
000000331150 <=> 3311.50

以下は私が試しているコードです、それは私に小数なしで結果を与えています:

amtf = string.Format("{0:0.00}", amt.TrimStart(new char[] {'0'}));

1
逆に、100を掛けPadLeft(12,'0')て文字列を使用する場合
V4Vendetta 2012年

回答:


76

文字列を10進数に変換してから、100で除算し、通貨形式の文字列を適用します。

string.Format("{0:#.00}", Convert.ToDecimal(myMoneyString) / 100);

要求に応じて通貨記号を削除し、代わりに10進数に変換するように編集しました。


3
通貨記号を無料で入手できます:)使いやすい0:#.00
V4Vendetta 2012年

@ThePowerありがとうございますが、「C」は通貨に変換され、$記号が返されます。
アルビン2012年

7
通貨を使用しfloatたりdouble、表現したりしないでください。
ジョングラント

2
ダブルやフロートを使ってみませんか?ここを参照してください:stackoverflow.com/questions/3730019/…–
Dov Miller

3
「#.00」の代わりに「F2」を使うべきではないですか?
Paul Groke 2016


43
decimal value = 0.00M;
value = Convert.ToDecimal(12345.12345);
Console.WriteLine(value.ToString("C"));
//OutPut : $12345.12
Console.WriteLine(value.ToString("C1"));
//OutPut : $12345.1
Console.WriteLine(value.ToString("C2"));
//OutPut : $12345.12
Console.WriteLine(value.ToString("C3"));
//OutPut : $12345.123
Console.WriteLine(value.ToString("C4"));
//OutPut : $12345.1234
Console.WriteLine(value.ToString("C5"));
//OutPut : $12345.12345
Console.WriteLine(value.ToString("C6"));
//OutPut : $12345.123450

コンソール出力:


これは文化の違いを適切に尊重します。文化の違いにより、記号だけでなく、数字の区切り記号(および理論的には通貨記号の位置)も変更される可能性があります。 msdn.microsoft.com/en-us/library/syy068tk(v=vs.90).aspx
Robear 2017


12

文字列を2進数または10進数にして、特定のロケールに適した形式に変換したら、

double amount = 1234.95;

amount.ToString("C") // whatever the executing computer thinks is the right fomat

amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ie"))    //  €1,234.95
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("es-es"))    //  1.234,95 € 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-GB"))    //  £1,234.95 

amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-au"))    //  $1,234.95
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-us"))    //  $1,234.95
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ca"))    //  $1,234.95

GetCultureInfoUWPには存在しないようです。
visc 2017

4
    string s ="000000000100";
    decimal iv = 0;
    decimal.TryParse(s, out iv);
    Console.WriteLine((iv / 100).ToString("0.00"));

通貨を使用しfloatたりdouble、表現したりしないでください。
ジョングラント


3
//Extra currency symbol and currency formatting: "€3,311.50":
String result = (Decimal.Parse("000000331150") / 100).ToString("C");

//No currency symbol and no currency formatting: "3311.50"
String result = (Decimal.Parse("000000331150") / 100).ToString("f2");



0

次のようなものを試してください。

decimal moneyvalue = 1921.39m;
string html = String.Format("Order Total: {0:C}", moneyvalue);
Console.WriteLine(html);

0
var tests = new[] {"000000001000", "000000001005", "000000331150"};
foreach (var test in tests)
{
    Console.WriteLine("{0} <=> {1:f2}", test, Convert.ToDecimal(test) / 100);
}

通貨記号を要求しなかったので、「C」の代わりに「f2」を使用しました


0

試してみてください

amtf =  amtf.Insert(amtf.Length - 2, ".");

先行ゼロは削除されません。単純な文字列操作ルートをたどる場合は、コードの最後に.Trim( "0" .ToCharArray())を追加する必要があります
Antony Scott
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.