C++:很长的小数浮动?

all*_*tta 0 c++ type-conversion

我有一个函数作为long参数,我希望它返回该数字作为float带有七位小数的 a 。

long进入函数:631452947,我希望函数将其转换并返回float:63.1452947

我怎样才能做到这一点?

我已经尝试过这个:

float makeLatLon (long val) {
    float tzt = (float)val/10000000.0;
    return tzt;
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

Fre*_*Foo 5

float逗号后的七位数字意味着总共九位数字的精度,并且在 IEEE 32 位 FP 类型的平台上(几乎无处不在),您只能期望七位数字的精度。用一个double

long n = 631452947;
float f = n / 10000000.f;
double d = n / 10000000.;

std::cout << std::setprecision(9)
          << f << std::endl
          << d << std::endl;
Run Code Online (Sandbox Code Playgroud)

我的盒子上印着

63.1452942
63.1452947
Run Code Online (Sandbox Code Playgroud)

所以你会发现使用 afloat会导致舍入误差。