c++ - sscanf 的精度问题

标签 c++ floating-point scanf

我正在使用 sscanf 从文本文件中读取一些值,并使用 %lf 将它们存储为 double。

但值正在变得四舍五入。例如

读取内容:5.655035220-E02 存储了什么:0.0565504

我认为它与格式说明符“%lf”有关。

请按原样建议用于读取和存储值的正确格式说明符。

最佳答案

您的意思是您已经编写了这样的代码(感谢您下次提供您的代码,顺便说一句,它确实有助于理解正在发生的事情,而不必依赖模糊的线索):

#include <stdio.h>

int main(){
  double v2;
  sscanf("5.655035220e-02", "%lf", &v2);
  printf("%f\n", v2);
  return 0;
}

你得到的结果如下:

0.056550

(给出或取一个小数位。)

你的问题不在sscanf()中的十进制到 double 的转换,这没问题,而是在printf()的 double 到十进制的转换>。变量 v2 包含您扫描的数字的近似值。您根本没有请求 printf() 打印此近似值的许多数字。尝试:

printf("%.10f\n", v2);
0.0565503522

关于c++ - sscanf 的精度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16831623/

相关文章:

c++ - C++ 对象如何处理被分配数组文字?

python - decimal.InvalidOperation 在 Series 中四舍五入值时出错

c - scanf()函数的理解

c - 第一个 scanf ("%s") 在使用第二个 scanf ("%s") 时中断,读取 0

c++ - 在 C++ 中使用指针 vector 时会泄漏内存吗?

c++ - 使用 Waf 查找本地外部库

c++ - 为什么我的函数打印 '0' ?

erlang - ebin 中的雅司病和 erlang 梁文件

c - scanf函数的使用次数有限制吗?

c++ - 从传递给模板函数的内部类实例中提取外部类类型