gpt4 book ai didi

java - double 的输出是怎么回事?

转载 作者:行者123 更新时间:2023-12-01 18:38:21 24 4
gpt4 key购买 nike

当我将 double 加在一起时,我得到了奇怪的输出。有人能告诉我为什么每次加 0.1 时都会出现重复的小数吗?

我已经计算出了将这些数字相加的公式,并且我自己在纸上完成了 3.3...

所有数字的总和(减少十分之一)从 3.3 到 1 等于 51.6

3.3
3.2
3.1 +
3.0
...
1.0
_
51.6

有一种更简单的方法可以使用两个公式来计算:

递增数的线性公式: Y = 0.1X + 1
以及递增数之和公式:[X * (Y + 1)]/2 = 总计

首先使用任意数字(在本例中为 100)求解 Y

11 = 0.1(100) + 1


然后使用 X 和 Y 求解总数

[100 * (11+1)]/2 = 600

我相信以下代码的输出应该是 600。毫无疑问,它不应该有重复小数。我在这里做错了什么?一定是我错过了什么。

public static void main(String[] args) {

int days = 100;
double inc = 0.1;
double init = 1;
double total = 0;

for (int i = 1; i <= days; i++) {
if (i == 1) {
total = total + init;
} else {
init = init + inc;
total = total + init;
}
}
System.out.println("Total: " + total);
System.out.println("Daily: " + init);
}

最佳答案

双无infinite精度(BigDecimal 也没有,但 BigDecimal 对于此实现有足够的精度)。

试试这个,

public static void main(String[] args) {
int days = 100;
java.math.BigDecimal init = java.math.BigDecimal.ONE;
java.math.BigDecimal total = java.math.BigDecimal.ZERO;
java.math.BigDecimal oneTenth = new java.math.BigDecimal(
"0.1");
for (int i = 1; i <= days; i++) {
if (i != 1) {
init = init.add(oneTenth);
}
total = total.add(init);
}
System.out.println("Total: " + total);
System.out.println("Daily: " + init);
}

哪些输出

Total: 595.0
Daily: 10.9

关于java - double 的输出是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20863026/

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