c – sscanf的精确问题

weixin_38051598 2019-09-12 12:16:05
我正在使用sscanf从文本文件中读取一些值,并使用%lf将它们存储为double. 但价值正在变得圆满.例如 内容如下:5.655035220-E02存储的内容:0.0565504 我认为这与格式说明符“%lf”有关. 请建议正确的格式说明符,以便读取和存储值.
...全文
92 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38051760 2019-09-12
  • 打赏
  • 举报
回复
你有2个问题 你的printf()说明符会四舍五入(可能)您的浮点变量无法保留所有所需的精度. 建议的格式说明符:阅读:sscanf(缓冲区,“%le”,& d)存储:printf(“%.* le”,DECIMAL_DIG / *或DBL_DIG 3 * /,d) 问题1 double d; sscanf("5.655035220e-02", "%lf", &d); printf("%.7lf\n", d); // 0.0565504 printf("%.7le\n", d); // 5.6550352e-02 printf("%.9le\n", d); // 5.655035220e-02 如果您使用%e打印出来,它们将是更重要的数字而不是前导零位数的%f.您看到的数字是舍入值.存储的数字不是5.65503522000000008 … e-02 问题2 如果您使用了float类型而不是double,那么您可能会遇到精度损失,因为5.655035220e-02在典型的4字节浮点中是5.65503537 … e-02. 推荐@devnull关于阅读每个计算机科学家应该知道的关于浮点运算的想法.http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧