我有一个以long
为参数的函数,我希望它将该数字作为float
返回七位小数。
这个long
进入函数:631452947,我希望函数转换它并返回float
:63.1452947
我该怎么做?
我试过这个:
float makeLatLon (long val) {
float tzt = (float)val/10000000.0;
return tzt;
}
但它不起作用。
答案 0 :(得分:3)
逗号后面的七位数表示精度总计九位数,并且在{32} FP类型(几乎无处不在)的平台上,float
只能得到七位精度。使用double
:
long n = 631452947;
float f = n / 10000000.f;
double d = n / 10000000.;
std::cout << std::setprecision(9)
<< f << std::endl
<< d << std::endl;
在我的包装盒上,打印
63.1452942
63.1452947
所以你看到使用float
会导致舍入错误。
答案 1 :(得分:0)
IEEE-754双规格和变体不能确保任何数字都存在7位数,因为双精度的密度不连续,所以double也不是一个好选择。 您可能需要考虑使用仅使用整数并使用如下结构构建固定精度数学:
typedef struct { int int_part, unsigned long dec_part } myfloat;