java - 在JAVA中,可以使用大数小数来进行 float 和 double 的减法

标签 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:- 7047

  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);

最佳答案

二进制 float (Java 中的 floatdouble)只能表示与使用 10 进制的人类相反的直觉形式的小数。例如,众所周知,数字 0.1 无法用二进制浮点表示。

二进制浮点的问题不是加法和减法。问题是您感兴趣的(某些)小数的表示,特别是十进制数。因此,转换为 BigDecimal 没有帮助。已经以二进制 float 表示的数字。在选择将它们表示为float时,它们就已经被近似了。和double 。按照您想要的精确计算不会消除当时产生的表示错误

如果您关心精确表示十进制数字,请不要使用二进制浮点来存储它们。换句话说,不要声明 amountbalance具有二进制浮点类型 floatdouble .

关于java - 在JAVA中,可以使用大数小数来进行 float 和 double 的减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49856743/

相关文章:

C++ 保存/加载双(到/从文件)

java - 无法在paintComponent中设置颜色

java - 通过蓝牙在 Android 应用程序和 PC 应用程序之间发送敏感数据

java - JSONPARSE 的实现不起作用

java - jspInit 将所有浏览器请求的对象保留在内存中

java - 归一化双 vector 不是单位长度到机器精度

C思维: float vs.整数和浮点表示

c++ - 为什么在 MSVC 中默认将浮点值(如 3.14)视为 double 值?

Java:指定小数点后有多少个数字

c++ - “Int”无法转换为类型 'double'