我可能是一个大白痴,因为没有看到非常明显的东西,但我不知道我现在可以检查什么。
问题是这样的。如果我有这个代码
decimal d = 45550M;
string s = string.Format("{0}", d);
结果有时是"45550,00"
而不是"45550"
. 而且我不知道是什么原因造成的。
我可以检查什么?什么会导致 String.Format 的行为不总是相同?
我可能是一个大白痴,因为没有看到非常明显的东西,但我不知道我现在可以检查什么。
问题是这样的。如果我有这个代码
decimal d = 45550M;
string s = string.Format("{0}", d);
结果有时是"45550,00"
而不是"45550"
. 而且我不知道是什么原因造成的。
我可以检查什么?什么会导致 String.Format 的行为不总是相同?
十进制值具有一定的比例因子。根据您对十进制值执行的操作,比例因子可能会发生变化。
十进制数是一个浮点值,它由一个符号、一个数值中的每个数字的范围从 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"
结果会因机器而异,因为您没有指定用于格式化的显式文化,因此运行时将使用当前线程文化,这实际上是机器上配置的文化。
string.Format("{0:0}", d);
应始终输出 0 个小数(“45550”)