2

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

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

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

结果有时是"45550,00"而不是"45550". 而且我不知道是什么原因造成的。

我可以检查什么?什么会导致 String.Format 的行为不总是相同?

4

3 回答 3

5

十进制值具有一定的比例因子。根据您对十进制值执行的操作,比例因子可能会发生变化。

十进制数是一个浮点值,它由一个符号、一个数值中的每个数字的范围从 0 到 9 以及一个比例因子组成,该比例因子表示分隔整数和小数部分的浮点小数点的位置的数值。

除非您指定小数位数,否则小数位数默认匹配小数值的比例因子。

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

例子:

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

string s1 = string.Format("{0}", x); // "100"
string s2 = string.Format("{0}", y); // "100.00"
于 2012-11-12T13:30:15.183 回答
3

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

于 2012-11-12T13:09:55.400 回答
2

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

于 2012-11-12T13:10:10.413 回答