c++ - 将浮点数转换为精确且无公差的字符串
问题描述
如何将浮点数转换为具有指定精度且无公差的字符串?例如,精度为 6 得到以下结果。
40.432 -> 40.432000.
在一个字符串中,我能得到的唯一值是 40.431999。
解决方案
如何将浮点数转换为具有指定精度的字符串
您可以使用字符串流:
std::ostringstream strs;
strs << std::fixed << std::setprecision(6) << the_value;
std::string str = strs.str();
在一个字符串中,我能得到的唯一值是 40.431999。
您的问题可能是您的系统使用的浮点格式中不存在 40.432 的精确表示。由于您永远无法拥有浮点值 40.432,因此您永远无法将此类值转换为字符串。
碰巧最接近 40.432 的可表示值更接近 40.431999,而不是 40.432。
你需要:
- 要么接受 40.432 ~~ 40.431999
- 或者使用足够精确的浮点格式来表示 40.432,它比 40.431999 更接近 40.432,并且对于您具有特定期望值的所有其他数字也足够精确。IEEE 754 双精度浮点恰好具有比 40.431999 更接近 40.432 的可表示值。
- 或者停止使用浮点数。如果您使用定点或任意精度数据类型,您将不会遇到这样的问题。
推荐阅读
- python - 如何递归迭代字典并返回结果?
- c# - 如何在子弹被射击时为其添加旋转?
- javascript - 使用文档选择器选择自定义元素
- python - 更改十字准线 matplotlib 光标示例的起始位置
- java - Android:PjSIP - 没有静态方法“SwigDirector_AudioMediaPlayer_onEof”
- microsoft-graph-api - 在 ASP.Net Core Web App 上使用 mgt-people-picker 时,有没有办法避免用户再次登录?
- python - SQLALchemy order_by 复杂的 hybrid_property
- python - Python:如何生成不属于数据帧的随机数?
- c - 优化了对 int 数组进行排序的冒泡排序时间
- amazon-web-services - 由于没有此类主机错误,Amazon S3 无法调用 API