java BigDecimal 表示不了无限循环小数 三分之一 得指定精度 如 伪代码
(1/3) .setScale(2, BigDecimal.ROUND_HALF_UP); 这样三分之一 就变成了 0.33这样了
在乘以三就不是1了
求解 java代码 在高精度银行系统中 如何计算 (1/3)* 3 = 1的问题
求解决方案
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();
好好回顾一下专业课的课本基础知识。
浮点运算 先乘和先除 肯定不一样,在有浮点运算中预期不溢出等(如过程还较多)情况下,那么先乘法,最后除法。
像视图(如游戏引擎【有大量的缩放因子计算,物理运算等等】)这些才比较符合浮点使用场景,货币等等业务,都是可期的很小的精度,应该使用整形,无论效率还是结果都会更好。
感觉这个只能逻辑上控制,先乘后除了。
金额里面应该没有无限循环小数的概念
比如10块钱 3个人 AA
其它两个人都出 3.33 你出 10 - 3.33 * 2 = 3.34