5

当我四舍五入一个小的负数时,它被四舍五入为 0。例如:decimal.Round(-0.001M, 2)返回 0。

如果四舍五入为零,我怎样才能得到这个符号。n<0除了检查然后进行四舍五入之外,还有其他更好的方法吗?

4

2 回答 2

2

比较位也适用于十进制。感谢@JonSkeet,否则我永远不会知道这个技巧。

var d = decimal.Round(-0.001M, 2);
bool isNegativeZero = d == decimal.Zero && decimal.GetBits(d).Last() < 0;

这是演示

于 2013-10-30T10:13:38.977 回答
1

除了检查 n<0 然后进行四舍五入之外,还有其他更好的方法吗?

简单回答是不”。这是最直接的方法。除非您有充分的理由编写比这更复杂的代码(您在问题中没有提到),否则不要这样做。您(或其他开发人员)最终会在几天或几个月后回到这段代码,并想知道为什么代码是这样编写的。

于 2013-10-30T10:23:01.470 回答