【发布时间】:2015-01-31 21:23:24
【问题描述】:
我必须将尾随零添加到十进制值。不仅用于显示(因此Format 不是一个选项),而且用于实际的底层数据,因为小数精度在我们的应用程序中很重要。
我试过了:
decimal value = 1M
decimal withPrecision = value + 0.000M;
这在很多情况下都很好用……奇怪的是,根本不是。我调试到 withPrecision 中的值仍然为 1M 的情况,因为在运行时看不到任何差异,而在即时窗口中看不到相同的硬编码值。我还使用了 decimal.GetBits 来查找差异 - 没有。
我试过了(这里建议Adjusting decimal precision, .net):
decimal value = 1M
decimal withPrecision = value * 1.000M;
效果很好 - 除了 case 值为零。然后结果是 0M 没有任何尾随零。我也不相信这个解决方案,它在其他情况下也可能不起作用。
目前我在:
decimal value = 1M
decimal withPrecision = (value * 1.000M) + 0.000M;
这适用于我目前发现的所有情况......但看起来也不太值得信赖。我还可以为零实现一个例外情况。
我认为Format 和Parse 会起作用。我不太喜欢。它看起来不是很快,我不明白为什么我必须将小数放入一个字符串中才能对其进行操作。
我开始相信这样一个简单的任务没有干净的解决方案。
【问题讨论】:
-
它可能是重复的,但不幸的是那里的答案不起作用(正如我所说:乘法不适用于零)。所以把这个问题当作当建议的答案不起作用时该怎么办......
-
“增加精度”到底是什么意思?调整比例不会改变小数的逻辑值,应该不会影响任何操作,那还有什么意义(除了显示,纯属格式问题)?
-
您的链接指向几个答案。重要的是第二个答案(Andrew Hare)。所谓的精度只是格式问题,与数据的真实精度无关。
-
@Pieter:我们有自己的基于小数的价值体系。有我们自己的操作,转换和比较。其中一部分已经由小数本身完成。这些值以“原始”小数和表示“精度”的整数形式出现,即该点之后的位数。它都可以存储在一个小数内,所以我尝试实际使用它。它被舍入或扩展到给定的精度。精度也用于进一步处理和显示。
标签: c# decimal precision digits