2013-07-03 28 views
-1

我有一个参数价格,它是十进制类型,它可以有一个正值,负值和零值。该值永远不会有小数,但需要显示小数。将正负值和零值格式化为小数点后2位格式

虽然我解析小数,它处理0和> 0值,但不处理负值。我如何处理所有3在一个解析操作?

decimal.Parse(a.price.ToString("##.00"), NumberStyles.AllowDecimalPoint) 

我需要转换数据以显示在欧洲文化中,所以-3.00的值应该显示为-3,00。

这里是我想,这让我

var culture = CultureInfo.GetCultureInfo("nl-NL"); 
Price = a.GroupId == g ? decimal.Parse(a.BidPrice.ToString("##.000", culture), NumberStyles.Number) : decimal.Parse(decimal.Zero.ToString("##.000", culture), NumberStyles.Number) 

型“System.FormatException”的第一次机会异常出现在mscorlib.dll

更多信息的异常:输入字符串的不以正确的格式。

添加一些测试数据,

3 should show up as 3,00 
-3 should show up as -3,00 
0 should show up as 0,00 

编辑 默认文化是EN-GB

+6

这似乎很奇怪..你有小数,并且你对它做了“ToStirng”,只是为了解析它回到十进制?你想要达到什么目的? – Botis

+0

http://stackoverflow.com/questions/2569166/converting-negative-decimal-to-string-loses-the – slavoo

+0

和生活一样奇怪是我的朋友,我需要小数来携带小数,这就是我的系统传递数据以接受值。 –

回答

3

尝试NumberStyles.Number,即会工作:

decimal price = -3; 
decimal result = decimal.Parse(price.ToString("##.00"), NumberStyles.Number); 
//Result: -3,00 (comma because I live in Europe :D) 

希望这有助于!

编辑:

为了确保逗号采用德国CultureInfo的,因为他们使用的十进制,逗号和句点作为千个分隔符:

decimal price = -3; 
decimal result = decimal.Parse(price.ToString("##.00", CultureInfo.GetCultureInfo("de-DE")), NumberStyles.Number); 
+0

如果我真的想要逗号而不是小数点会怎么样?在那种情况下我将使用什么格式? –

+0

检查我编辑的答案。 :) – Abbas

+0

似乎不适合我。它给了我一个例外“mscorlib.dll中发生了'System.FormatException'类型的第一次机会异常”。查看我正在尝试执行的更新问题。 –