如何解决用浮点数到字符串的表示法来偷工减料?
我有一个浮点数,我需要将其转换为5位小数精度(X.XXXXX)的字符串,这意味着我至少需要6位小数才能向上/向下取整。问题是获取整数表示的操作会导致产生一个很大的数字,我无法存储(我需要像Big Integer这样的东西,但出于兼容性原因,我不能依赖任何内置的东西,而且我不会假装我了解如何以及以相当简单的方式重新发明一个)。我可以抢先限制它:
result = (m * Pow(5,+exp) / Pow(10,8));
,但这只会为少数标准化的浮点数(如0.3f
,诸如1-E5
或113.754f
(这现在在“上限”中又有3个“前导”数字)给出正确的结果“部分)将是错误的。
考虑到我需要最多五(6)个小数精度-我可以采取快捷方式吗?
解决方法
我可以采取捷径吗?
不,是。
不能获得最佳转换结果。快捷方式进入table-maker's dilemma。简而言之,在某些极端情况下,需要大量代码才能进行浮点数到字符串的转换。通常,这意味着大多数操作都是使用整数数学进行的。 Example。
是,如果代码愿意容忍某些错误。此错误是由于浮点运算的累积舍入导致的。由于典型的float具有24位二进制精度(至少至少6个有效十进制数字),因此很难获得没有错误的“ 5个十进制精度(X.XXXXX)”(实际上是6个有效十进制数字)。>
使用更广泛的数学可以大大减少错误(也许减少数亿个错误),但并不能消除错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。