gpt4 book ai didi

Java更精确的算术

转载 作者:搜寻专家 更新时间:2023-11-01 01:36:21 25 4
gpt4 key购买 nike

我正在用 Java 构建一个网络应用程序,它可以计算并向用户显示步骤。在用小数进行基本算术运算时,我经常会在准确的输出中弄得一团糟。

这是我的问题:

double a = 0.15;
double b = 0.01;
System.out.println(a - b);
// outputs 0.13999999999999999

float a = 0.15;
float b = 0.01;
System.out.println(a - b);
// outputs 0.14

float a = 0.16f;
float b = 0.01f;
System.out.println(a - b);
// outputs 0.14999999

double a = 0.16;
double b = 0.01;
System.out.println(a - b);
// outputs 0.15

对于完整 的准确性,两者都不可靠。是否有更精确的数字类,或者我应该将值四舍五入?

最佳答案

您可以使用 BigDecimal为了这。它很丑陋,但它有效:

BigDecimal a = new BigDecimal("0.15");
BigDecimal b = new BigDecimal("0.01");
System.out.println(a.subtract(b));

一定要使用字符串参数或 valueOf 方法构造它们,如下所示:

BigDecimal x = new BigDecimal("0.15");   // This is ok
BigDecimal x = BigDecimal.valueOf(0.15); // This is also ok

并且没有像这样的双参数:

BigDecimal x = new BigDecimal(0.15); // DON'T DO THIS

因为如果你传入一个 double ,你也会将 double 的不准确性传递给新的 BigDecimal 实例。如果您传入一个字符串,BigDecimal 就会知道™并做正确的事情™。

关于Java更精确的算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12172630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com