首页 新闻 会员 周边

银行系统中 BigDecimal 三分之一乘以三等于1的问题

0
悬赏园豆:10 [待解决问题]

java BigDecimal 表示不了无限循环小数 三分之一 得指定精度 如 伪代码
(1/3) .setScale(2, BigDecimal.ROUND_HALF_UP); 这样三分之一 就变成了 0.33这样了
在乘以三就不是1了

求解 java代码 在高精度银行系统中 如何计算 (1/3)* 3 = 1的问题
求解决方案

agnils的主页 agnils | 菜鸟二级 | 园豆:205
提问于:2022-02-12 14:42
< >
分享
所有回答(4)
0

C# 可以用Convert 转换,你看看java 有没有类似转换器

            decimal c ,d, a = 1, b = 3;
            int e;
            d = a / b;
            c = d * 3;
            e = Convert.ToInt32(d * 3);
            Console.WriteLine(d.ToString());
            Console.WriteLine(c.ToString());
            Console.WriteLine(e.ToString());
            Console.ReadLine();

中华鲟3670 | 园豆:847 (小虾三级) | 2022-02-12 21:15
0

好好回顾一下专业课的课本基础知识。

浮点运算 先乘和先除 肯定不一样,在有浮点运算中预期不溢出等(如过程还较多)情况下,那么先乘法,最后除法。

像视图(如游戏引擎【有大量的缩放因子计算,物理运算等等】)这些才比较符合浮点使用场景,货币等等业务,都是可期的很小的精度,应该使用整形,无论效率还是结果都会更好。

花飘水流兮 | 园豆:13560 (专家六级) | 2022-02-12 23:18
0

感觉这个只能逻辑上控制,先乘后除了。

angelshelter | 园豆:9887 (大侠五级) | 2022-02-13 11:13
1

金额里面应该没有无限循环小数的概念
比如10块钱 3个人 AA
其它两个人都出 3.33 你出 10 - 3.33 * 2 = 3.34

huiyuanai709 | 园豆:487 (菜鸟二级) | 2022-02-13 22:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册