当我舍入一个小的负数时,它会四舍五入为0。
例如:decimal.Round(-0.001M, 2)
返回0.
如果将其四舍五入为零,我该如何获得该符号。除了检查n<0
然后进行回合之外,还有其他更好的方法吗?
答案 0 :(得分:2)
比较这些位也适用于十进制。感谢@JonSkeet,否则我从来不知道这个技巧。
var d = decimal.Round(-0.001M, 2);
bool isNegativeZero = d == decimal.Zero && decimal.GetBits(d).Last() < 0;
以下是Demo
答案 1 :(得分:1)
还有其他更好的方法,而不是检查n&lt; 0然后进行回合?
简单的答案是“不”。这是最直接的方式。除非你有充分的理由编写比这更复杂的代码(你在问题中没有提到),否则不要这样做。您(或其他开发人员)最终会在几天或几个月后回到此代码,并想知道为什么代码是以这种方式编写的。