在JAVA中,可以使用大小数进行浮点和双精度减法运算

在JAVA中,可以使用大小数进行浮点和双精度减法运算,java,floating-point,double,bigdecimal,Java,Floating Point,Double,Bigdecimal,这是代码(我给出了代码的一部分) 以下代码为储蓄账户提款代码:- 我声明变量如下:- protected static double balance; protected static float amount; 所以我开了一个余额为7095的账户,然后我进行取款操作,输入金额为100.0。我得到的结果如下,这是错误的。如果我将金额输入为100,则得到预期结果。我需要帮助 Total balance:- 7095 Withdraw amount:- 48 Current balance:- 7

这是代码(我给出了代码的一部分) 以下代码为储蓄账户提款代码:-

我声明变量如下:-

protected static double balance;
protected static float amount;
所以我开了一个余额为7095的账户,然后我进行取款操作,输入金额为100.0。我得到的结果如下,这是错误的。如果我将金额输入为100,则得到预期结果。我需要帮助

Total balance:- 7095
Withdraw amount:- 48
Current balance:- 7047

二进制浮点(
float
double
在Java中)只能表示形式与使用基数为10的人相反的小数。例如,众所周知,数字0.1不能用二进制浮点表示

二进制浮点的问题是而不是加法和减法。问题是您感兴趣的(某些)分数的表示,特别是十进制数。因此,将已用二进制浮点表示的数字转换为
BigDecimal
。在选择将它们表示为
float
double
时,它们已经被近似。尽可能精确地计算不会消除当时产生的表示错误


如果您关心精确地表示十进制数,请不要使用二进制浮点来存储它们。换句话说,不要用二进制浮点类型
float
double
声明
amount
balance
我无法理解这个问题,请参阅关于您使用的两个构造函数的BigDecimal Javadoc。尝试使用
String
构造函数来完全准确地表示数字:
newbigdecimal(String.valueOf(amount))问题可能在于读取
金额的代码中。除非这是一个宠物项目,否则永远不要使用浮点数来表示货币。浮点运算需要大量舍入,对于金融应用程序来说不够精确。文档中也这样说:“注意:此构造函数的结果可能有点不可预测。可以假设,在Java中编写新的BigDecimal(0.1)会创建一个完全等于0.1的BigDecimal(未标度值为1,标度为1),但实际上等于0.10000000000000055551151231257827021181583404540105625。这是因为0.1不能精确表示为双精度(或者,就此而言,表示为任何有限长度的二进制分数)。因此,传递给构造函数的值不完全等于0.1,注释太长
  BigDecimal amount3 = new BigDecimal(balance);
  BigDecimal amount4 = new BigDecimal(amount) ;
  System.out.println("Total balance" +amount3);
  System.out.println("Withdraw amount" + amount4);
  Object obj = new Object();
  obj = (amount3.subtract(amount4));
  System.out.println("Current balance" +obj);