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