gpt4 book ai didi

java - java中的 double 舍入

转载 作者:行者123 更新时间:2023-12-01 14:02:57 32 4
gpt4 key购买 nike

我读过其他一些帖子,它们似乎对其他人有用,但当我尝试它们时,它们不起作用。我刚刚开始学习Java编程,我似乎不明白如何四舍五入。

我试过了

answer = input * input;
answer = answer*1000; // Rounds the number to to three decimals points
answer = Math.round(answer);
answer = answer/1000;

我也尝试过(如评论中所述),但它只显示相同的数字

double input = 1.0345;
Double.valueOf(new DecimalFormat("#.##").format(input)); // 2 decimal-places
System.out.println("1.0345 rounded is " + input);

但似乎不起作用。

最佳答案

如果您处理精确值(尤其是金额、利率等),则必须避免浮点值/算术。浮点变量可以取很大范围的值,但它们并不精确。特别是在计算长期或非常不同的数量时,您会遇到麻烦。舍入误差可能会累积。这是由于十进制数的宽值范围存储在固定长度的 32 位/64 位二进制值中的方式造成的。例如,无辜的友好值0.1作为二进制浮点值是相当困难的。有关详细信息,请参阅 IEEE 754 规范。

因此,在这些情况下,您必须使用数据类型进行精确计算。 Java 提供 BigDecimal类(class)。避免浮点精度错误的另一种方法是仅使用整数进行计算,然后格式化输出以使其具有一定的小数位数。

但是由于 Java 提供了一个很好的即用型定点数学类 ( BigDecimal ),因此您可以尝试一下。看看这个小示例代码片段。您可以从多个不同的 rounding modes 中进行选择并确定您想要有多少位小数。

import java.math.BigDecimal;
import java.math.RoundingMode;

public class RoundTest {

public static void main(String[] args) {

String userInput = "42.133742";
BigDecimal startValue = new BigDecimal(userInput);

BigDecimal multFactor = new BigDecimal("1.23"); // => increase by 23 %

BigDecimal result = startValue.multiply(multFactor);

System.out.println("Original result without rounding: " + result);
System.out.println("Scale: " + result.scale());

// Compare different rounding modes:

final int DECIMAL_PLACES = 2;
BigDecimal roundDown = result.setScale(DECIMAL_PLACES, RoundingMode.DOWN);
BigDecimal roundHalfUp = result.setScale(DECIMAL_PLACES, RoundingMode.HALF_UP);
BigDecimal roundUp = result.setScale(DECIMAL_PLACES, RoundingMode.UP);

System.out.println("Round down (" + DECIMAL_PLACES + " decimal places): " + roundDown);
System.out.println("Round half-up (" + DECIMAL_PLACES + " dec. places): " + roundHalfUp);
System.out.println("Round up (" + DECIMAL_PLACES + " decimal places): " + roundUp);

}
}

关于java - java中的 double 舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19199070/

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