0

可能重复:
.Net 浮点到双转换

我虽然我理解浮点但有人可以解释以下内容

float f = 1.85847987E+9F;
double d = Convert.ToDouble(f);

d 现在转换为字符串 as 1858479872.0。我假设额外的 2 是因为 double 不能准确地表示浮点数。

我的问题是为什么直接分配时它似乎能够重新代表相同的号码

double d = 1.85847987E+9;

它完全显示为185847987.0

4

3 回答 3

1

因为double可以,float也不能1.85847987E+9准确表示。

为什么编译器不抱怨“float f = 1.85847987E+9F;” 如果它不能正确地表示它

根据 C# 规范,第 4.1.6 节浮点类型

浮点运算符,包括赋值运算符,从不产生异常。

于 2013-01-22T14:20:09.270 回答
0

因为浮点数存在于符号、尾数和指数之外。请参阅Jon Skeet 在此处的回答如何提取这些值。

因为1.85847987E+9F,尾数为7259687,指数为8。然后mantissa << exponent等于1858479872。由于浮点数的精度限制为 7 位,因此任何超过 7 位的数字的值取决于实现,而不是输入。您可以通过输入123456789F.

于 2013-01-22T14:28:03.320 回答
0

问题不是双重的,而是浮动的。浮点数限制为 32 位,而双精度使用 64 位。

于 2013-01-22T14:20:12.770 回答