如何解决无限循环小数对结果的影响?

3 天前
 ukipoi
例如
A = 33415.305
B = 29.7
C = 0.9
先计算 A 除以 B ,结果再乘以 C ,对最终结果保留 2 位小数。
假设计算必须分步,并且除法的步骤无法移动到最后一步,有办法得到正确的值吗?
924 次点击
所在节点    问与答
11 条回复
re2ikotr
3 天前
用分数?
coverme7
3 天前
帮你问了 ChatGPT:

解决无限循环小数对结果的影响,特别是在计算中保留特定精度的情况下,最重要的原则是合理处理每一步的四舍五入或截断。对于你所描述的计算,可以采取以下策略:
保留精度:在每一步的计算中,可以适当的四舍五入或截断结果,以避免无限循环小数对最终结果的影响。这个精度要在每一步计算中统一。
分步计算的处理:
第一步: 计算 A 除以 B ,即 33415.305 ÷ 29.7 。这个结果可能是一个无限循环小数(例如,1.125768...)。在这一计算中,可以先保留两位小数,得到 1125.77 ,或者根据需要选择其他精度。
第二步: 然后将这个结果乘以 C ,即 1125.77 × 0.9 。计算后得到结果是 1013.193 ,再次根据要求保留两位小数,结果为 1013.19 。
总结:
原则:在每一步的计算中都要注意精度的控制。因为除法可能带来无限小数,所以你可以选择在每一步四舍五入或截断到所需的小数位数。最常见的做法是:每一步先保留较高精度的值,最终再根据需要保留两位小数。
算法建议:可以在每一步的计算中应用四舍五入,确保结果不会因为无限循环小数而影响准确性,特别是当计算中涉及到多次操作时。
在编程语言中,通常会有内置的四舍五入函数,或者你可以通过 decimal 模块(如 Python )来精确控制小数位数,避免普通浮点数的精度问题。
ukipoi
3 天前
@coverme7
已经问过 GPT 了,但是这个是 0.4 的 4 循环,如论保留多少小数,最终结果都只有 .485 和.4849999 的 9 循环的区别。这会造成最终结果是.48 和.49 的区别,然而 AI 只会让我提高精度。
ukipoi
3 天前
@re2ikotr
有什么库计算是分数的吗?没有接触过
newaccount
3 天前
金额问题咨询财务,不然以后审计有的你烦的
sivacohan
3 天前
解决不了:
物理学的方法就是提高精度。比如最终结果要保留 2 为小数,计算过程中就都保留 3 位或者更多。
如果是金融问题,除了提高精度之外,最终还好有一个校验过程,比如 100.00 元 3 个人平分,每个人分 33.33 元之后,此时三人加和为 99.99 少了 1 分钱,程序会按照某个规定把这 1 分加上去(这个规定就是合规的一部分),结果是两个人 33.33 ,一个人 33.34
ejin
3 天前
不要离开业务讨论解决办法,最后还是无法满足需求。

你就问需求方,在没有你编程之前,是如何处理这些差异的,这些差异不只是编程的时候才存在,肯定是一直有这样的误差。

不要怕误差存在,而是如何处理这些误差。
elevioux
3 天前
从实际业务去考虑
yianing
3 天前
纯技术解决就是分数计算,golang 有 big.Rat
angeni
3 天前
IEEE754 , 没什么好的解决方法。32 位有个 1e-7 误差
ahu
2 天前
银行家舍入法,了解一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1158570

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX