我可能是一个非常大的白痴因为没有看到非常明显的东西,但我不知道我现在能检查什么。
问题是这个。如果我有这个代码
decimal d = 45550M;
string s = string.Format("{0}", d);
结果有时为"45550,00"
而不是"45550"
。
我不知道是什么原因导致的。
我可以检查什么?是什么导致String.Format不总是表现相同?
答案 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”)