浮点转换c#

时间:2013-01-22 14:15:44

标签: c# floating-point

  

可能重复:
  .Net float to double conversion

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

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

d现在转换为1858479872.0字符串。我假设额外的2是因为double不能完全代表浮点数。

我的问题是为什么它似乎能够在直接分配时重新显示相同的数字

double d = 1.85847987E+9;

,它显示为185847987.0

3 个答案:

答案 0 :(得分:1)

因为double可以,而float无法准确代表1.85847987E+9

  

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

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

  

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

因为浮点数存在于符号,尾数和指数之外。请参阅Jon Skeet's answer here如何提取这些值。

对于1.85847987E+9F,尾数为7259687,指数为8。然后mantissa << exponent等于1858479872。由于float的精度为limited to 7 digits,因此超过7位的任何数字的值取决于实现,而不是输入。您可以通过输入123456789F轻松测试。