当char数组转换为long double时得到错误的值

时间:2019-02-23 21:40:29

标签: c

chars(test value) = 1124000727777607680000 , 25852016738884976640000 , 620448401733239439360000

这是我的代码的一部分。...

char* chars = (char*)malloc(capacity_c + 1);

long double* numbers = malloc((sizeof(long double) *capacity_l + 1));

printf("string = %s\n",chars);

long double d = 0;

sscanf_s(chars, "%Lf", &d);

printf("%Lf \n", d);

string = 1124000727777607680000
     d = 1124000727777607680000.000000   --> correct value input numbers array

string = 25852016738884976640000
     d = 25852016738884978212864.000000  --> it was changed the value.....

string = 620448401733239439360000
     d = 620448401733239409999872.000000 --> it was changed the value.....

1 个答案:

答案 0 :(得分:1)

双精度不具有足够的精度来精确表示该值,因此该数字被更改为long double可表示的最接近的值。为了存储大整数的精确值,您可能不应该使用浮点数。而是使用一个足够大的整数值来满足您的所有用途。如果您的数字不受限制,请使用动态分配的整数类,该类可以不断添加位(就像Python的长整数一样)。