如何将字符串格式化为金钱


82

我有一个像 000000000100,我想将其转换为1.00,反之亦然。

前导零将被删除,最后两位是小数。

我举更多的例子:

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

Answers:


76

将字符串转换为十进制,然后将其除以100,然后应用货币格式字符串:

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

根据要求删除了货币符号,并转换为小数。


3
并且您免费获得货币符号:)使用更简单0:#.00
V4仇杀队2012年

@ThePower谢谢,但是'C'将转换为货币,这将返回$符号。
Alvin

7
您永远不要使用floatdouble代表货币。
乔恩·格兰特

2
为什么不使用double或float?在这里看到:stackoverflow.com/questions/3730019/...
多夫米勒

3
您不应该使用“ F2”代替“#.00”吗?
保罗·格罗克


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/zh-cn/library/syy068tk(v=vs.90).aspx
Robear '17


12

将字符串转换为双精度/十进制格式后,可以将其设置为适合特定语言环境的正确格式

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

GetCultureInfo在UWP中似乎不存在。
visc

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

您永远不要使用floatdouble代表货币。
乔恩·格兰特

4

像这样简单尝试

 var amtf = $"{Convert.ToDecimal(amt):#0.00}";

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");

2

您也可以:

string.Format("{0:C}", amt)


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);
}

由于您不要求输入货币符号,因此我使用“ f2”代替“ C”


0

尝试

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

不会删除前导零。如果您沿简单的字符串操作路线走下去,则需要在代码的末尾添加.Trim(“ 0” .ToCharArray())
Antony Scott,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.