double数据类型转换适用于Windows但不适用于Linux

时间:2013-04-03 08:49:43

标签: casting double

我在C中有一个字符串指针,它有bigint数据。

例如9223372036854775807,即2^63

我想把它转换为double,但是你知道double有15/16位可用于存储在小数部分,其余的位被丢弃。所以上面的数字非常大,将被转换为{{1} } {ie 9.22337203685476E+18

这使得比较原始值和铸造值不匹配。这通常发生在Linux平台上。这就是为什么在Windows上不会发生这种情况的原因?

是编译器依赖还是我不知道的东西。 ?

1 个答案:

答案 0 :(得分:0)

该值为2^63 - 1,无法用double精确表示。可以表示的最接近的值是2^63。如果你使用例如,那就是你得到的sscanfatof

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    const char *str = "9223372036854775807";
    double d;
    double e;
    sscanf(str, "%lf", &d);
    e = atof(str);
    printf("%f\n", d);    // 9223372036854775808.000000
    printf("%f\n", e);    // 9223372036854775808.000000
}

请参阅http://ideone.com/zz2NIF