0

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

例如9223372036854775807,即2^63

我想将其转换为 double 但您知道 double 有 15/16 位可用于存储小数部分,其余位将被丢弃。因此上述非常大的数字将转换为9.22337203685476E+18ie 922337203685476000

这使得比较原始值和转换值不匹配。这通常发生在 Linux 平台上。问题是为什么这不会在 Windows 上发生?

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

4

1 回答 1

0

该值是2^63 - 1,不能用 精确表示double。可以表示的最接近的值是2^63。这就是你使用 egsscanf或得到的结果atof

#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

于 2013-04-03T08:57:53.303 回答