C# 小负数的四舍五入如何得到-0?

C# 小负数的四舍五入如何得到-0?,c#,rounding,C#,Rounding,当我舍入一个小的负数时,它被舍入为0。 例如:decimal.Round(-0.001M,2)返回0 如果符号四舍五入为零,我如何才能得到它。除了检查n比较十进制的位,还有什么更好的方法吗。多亏了@JonSkeet,否则我就不会知道这个把戏了 var d = decimal.Round(-0.001M, 2); bool isNegativeZero = d == decimal.Zero && decimal.GetBits(d).Last() < 0; var d=十

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


如果符号四舍五入为零,我如何才能得到它。除了检查
n比较十进制的位,还有什么更好的方法吗。多亏了@JonSkeet,否则我就不会知道这个把戏了

var d = decimal.Round(-0.001M, 2);
bool isNegativeZero = d == decimal.Zero && decimal.GetBits(d).Last() < 0;
var d=十进制四舍五入(-0.001M,2);
bool isNegativeZero=d==decimal.Zero&&decimal.GetBits(d.Last()<0;
这是你的电话号码


除了检查,还有其他更好的方法吗n@Fr这似乎是针对十进制的,而不是双精度的,哈罗德,不应该仍然适用吗?@FrédéricHamidi:如果x==0,这个答案不是失败了吗?“而不是真的0吗?”Stefan,我不这么认为,因为它实际上测试了这种情况。我的理解是,将
1
除以负零将产生负无穷大,它小于零。@FrédéricHamidi我在测试@Vladimir的答案时遇到了一个被零除的异常,并且超过了
Math.Round
Decimal.Round
返回一个没有符号的0,因此我无法检查最终结果。相反,我只能试着用符号(x)然后做数学。圆(x)谢谢,我同意你的答案。抱歉,我接受@Sriram Sakthivel对他所做调整的回答。