c - c 中要加倍的数字字符串

标签 c string char double

我正在尝试将 c 中的简单字符串转换为 double 字符串:

 double n;
 sscanf_s(str, "%lf", &n);
 printf("%lf", n);

考虑到:

const char *str[] = {"37107287533902102798797998220837590246510135740250"};

当我尝试打印 n 时,直到第 16 位数字都很好。输出是这样的:

371072875339021043110257403....

可能是什么问题?

最佳答案

2个问题:

sscanf_s(str, "%lf", &n); 需要一个 char *,而不是 char **。启用所有编译器警告以查看此类问题,并确保正确剪切/粘贴问题。

const char *str[] = {"37107287533902102798797998220837590246510135740250"};  

您的意思是以下内容吗?

const char *str = {"37107287533902102798797998220837590246510135740250"};
<小时/>

double 通常可以准确编码大约 264 个不同的值,因为 double 通常是 64-一点数据。
37107287533902 102798797998220837590246510135740250不是其中之一。

像下面这样的输出是合理的:
37107287533902 1043110257403....

37107287533902 104311025740304689820495323650000000.0是最接近的可表示的double

37107287533902 099118728881769862191964827320000000.0将是下一个最佳选择。

请注意,在此范围内,精确 double 相距 2112(约 5.2*1033)。这就是大多数double编码的二进制性质。

关于c - c 中要加倍的数字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51297021/

相关文章:

c++ - 结构 (C) 中的 malloc 错误

c - 使用 2 条 switch 语句打印输出

c - 生成对的所有排列,不包括单个元素的排列

r - 从 R 中的数据框中识别无意义或乱码的文本。有没有办法将字符串/单词部分匹配到字典?

c - 从 0 到 x 填充 char *array

c++ - const char* 到 int 转换?

c - 查看是否通过 tcp 传递了消息

C# 字符串中字符的第三个索引

c:将字符串传递给函数失败

java - 错误: java. lang.OutOfMemoryError:Java堆空间