String.Format异常

时间:2012-11-12 13:07:54

标签: c# string-formatting

我可能是一个非常大的白痴因为没有看到非常明显的东西,但我不知道我现在能检查什么。

问题是这个。如果我有这个代码

decimal d = 45550M;
string s = string.Format("{0}", d);

结果有时为"45550,00"而不是"45550"。 我不知道是什么原因导致的。

我可以检查什么?是什么导致String.Format不总是表现相同?

3 个答案:

答案 0 :(得分:5)

decimal value具有一定的缩放系数。根据您对小数值执行的操作,缩放系数可能会发生变化。

  

十进制数是一个浮点值,由一个符号,一个数值组成,其中值中的每个数字的范围为0到9,以及一个缩放因子,指示分隔积分的浮点小数点的位置和数值的小数部分。

除非指定小数位数,否则小数位数默认与小数点的缩放系数相匹配。

  

缩放因子还会保留十进制数中的任何尾随零。尾随零不影响算术或比较运算中的十进制数的值。但是,如果应用了适当的格式字符串,ToString方法可以显示尾随零

示例:

var x = 100m;
var y = x * 1.00m;

string s1 = string.Format("{0}", x); // "100"
string s2 = string.Format("{0}", y); // "100.00"

答案 1 :(得分:3)

结果因机器而异,因为您没有指定用于格式化的显式文化,因此运行时将使用当前线程文化,这将是机器上配置的文化。

答案 2 :(得分:2)

string.Format("{0:0}", d);应始终输出0位小数(“45550”)