C# 为什么double.Parse会忽略零的符号?
例如,在:C# 为什么double.Parse会忽略零的符号?,c#,C#,例如,在: bool eq = (1 / double.Parse("-0.0")) == (1 / -0.0); eq将为false double.Parse要显式忽略零的符号需要经历一些麻烦,即使不这样做几乎不会导致问题。 因为我需要原始表示,所以我必须编写自己的解析函数,该函数在特殊情况下为负零,并对其他所有内容使用double.Parse 这不是什么大问题,但我真的很想知道为什么他们决定忽略零的符号,因为在我看来,不这样做并不是一件坏事。有区别: double.Parse(“-0.0”
bool eq = (1 / double.Parse("-0.0")) == (1 / -0.0);
eq
将为false
double.Parse
要显式忽略零的符号需要经历一些麻烦,即使不这样做几乎不会导致问题。
因为我需要原始表示,所以我必须编写自己的解析函数,该函数在特殊情况下为负零,并对其他所有内容使用double.Parse
这不是什么大问题,但我真的很想知道为什么他们决定忽略零的符号,因为在我看来,不这样做并不是一件坏事。有区别:
但是语句2中的减号运算符并不意味着“-0.0”。我不知道为什么,但是一个潜在的解决方案是:如果您在开头看到一个
-
字符,请解析字符串的其余部分,然后对其求反。为什么需要零的符号?IEEE 754指出,+0==-0
毕竟。你的代码示例如何不引发DivideByZeroException?@Donal:因为我需要以字节为单位的原始表示,这是不同的@FishBasketGordo:因为在IEEE 754浮点中被零除是合法的且定义良好的。@Fish:处理浮点类型时不会引发该异常。MSDN上是这样写的。这是因为CLR包含COMNumber::NumberBufferToDouble()中的代码,如果指数和尾数均为零,则无论符号如何,该代码都会显式将结果设置为0。你不能改变它。当然可以,试着把(1/-0.0)
改成(1/0.0)
-结果会是真的
你在想NaN吗?@harold:奇怪,不,我还以为它对无穷远也不起作用。(这没道理)但你说得对,谢谢+∞ 不等于-∞ 在任何现代数学解释中…