Convert float to double loses precision but not via ToString

前端 未结 3 628
暗喜
暗喜 2020-12-05 10:24

I have the following code:

float f = 0.3f;
double d1 = System.Convert.ToDouble(f);
double d2 = System.Convert.ToDouble(f.ToString());

The r

3条回答
  •  感动是毒
    2020-12-05 10:49

    Its not a loss of precision .3 is not representable in floating point. When the system converts to the string it rounds; if you print out enough significant digits you will get something that makes more sense.

    To see it more clearly

    float f = 0.3f;
    double d1 = System.Convert.ToDouble(f);
    double d2 = System.Convert.ToDouble(f.ToString("G20"));
    
    string s = string.Format("d1 : {0} ; d2 : {1} ", d1, d2);
    

    output

    "d1 : 0.300000011920929 ; d2 : 0.300000012 "
    

提交回复
热议问题