C ++:long用小数浮点数?

时间:2013-11-21 09:36:11

标签: c++ type-conversion

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

这个long进入函数:631452947,我希望函数转换它并返回float:63.1452947

我该怎么做?

我试过这个:

float makeLatLon (long val) {
    float tzt = (float)val/10000000.0;
    return tzt;
}

但它不起作用。

2 个答案:

答案 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;