Math 我怎样才能从二进制中不能很好地执行的乘法中得到精确的结果?

Math 我怎样才能从二进制中不能很好地执行的乘法中得到精确的结果?,math,binary,rounding,Math,Binary,Rounding,例如: int myNumber=3; System.out.printmyNumber*.1 我的输出是0.300000000004。我对这一点的理解是,不是以二进制结尾的数字,例如,十进制中的1,不是以二进制结尾的,这就是原因。但是,如果我使用计算器,它只会返回0.3。只是四舍五入吗?简单的袖珍计算器通常在内部使用以10为基数的算术,因此您看到的行为不是由于四舍五入造成的。现代CPU使用BASE2的原因是,对于它们需要处理的大量计算吞吐量而言,它是一种更有效的表示形式。但是,一个简单的袖珍计

例如: int myNumber=3; System.out.printmyNumber*.1


我的输出是0.300000000004。我对这一点的理解是,不是以二进制结尾的数字,例如,十进制中的1,不是以二进制结尾的,这就是原因。但是,如果我使用计算器,它只会返回0.3。只是四舍五入吗?

简单的袖珍计算器通常在内部使用以10为基数的算术,因此您看到的行为不是由于四舍五入造成的。现代CPU使用BASE2的原因是,对于它们需要处理的大量计算吞吐量而言,它是一种更有效的表示形式。但是,一个简单的袖珍计算器只需要在使用它的人输入计算机时快速执行计算。因为基数10更适合于财务或货币计算,例如,在一个简单的袖珍计算器中使用它是很自然的。

我假设它只是将要显示的值四舍五入,而不是值的内部表示形式。它也可能使用BigNum样式的表示来存储确切的值,但我认为这不太可能。