gpt4 book ai didi

java - 使用字符串和 (int, long, double) 构造函数的 BigDecimal 舍入差异

转载 作者:行者123 更新时间:2023-12-01 22:29:44 25 4
gpt4 key购买 nike

使用舍入时,在 bigdecimal 中使用不同的构造函数有什么区别。运行以下代码时:

public class RoundTest {

/**
* @param args
*/
public static void main(String[] args) {//2.425
BigDecimal intv = new BigDecimal(4.645);
BigDecimal doublev = new BigDecimal(4.645);
BigDecimal strV = new BigDecimal("4.645");
BigDecimal longV = new BigDecimal(4.645);

System.out.println("Int - "+intv.setScale(2, RoundingMode.HALF_UP));
System.out.println("Int - "+intv.setScale(2, RoundingMode.HALF_DOWN));
System.out.println("Int - "+intv.setScale(2, RoundingMode.HALF_EVEN));

System.out.println("Double -"+doublev.setScale(2, RoundingMode.HALF_UP));
System.out.println("Double -"+doublev.setScale(2, RoundingMode.HALF_DOWN));
System.out.println("Double -"+doublev.setScale(2, RoundingMode.HALF_EVEN));

System.out.println("String - "+strV.setScale(2, RoundingMode.HALF_UP));
System.out.println("String - "+strV.setScale(2, RoundingMode.HALF_DOWN));
System.out.println("String - "+strV.setScale(2, RoundingMode.HALF_EVEN));

System.out.println("Long - "+longV.setScale(2, RoundingMode.HALF_UP));
System.out.println("Long - "+longV.setScale(2, RoundingMode.HALF_DOWN));
System.out.println("Long - "+longV.setScale(2, RoundingMode.HALF_EVEN));
}
}

输出是:

Int - 4.64
Int - 4.64
Int - 4.64
Double -4.64
Double -4.64
Double -4.64
**String - 4.65**
String - 4.64
String - 4.64
Long - 4.64
Long - 4.64
Long - 4.64

为什么使用字符串构造函数进行舍入会得到与其他构造函数不同的结果?使用 BigDecimal 进行舍入时是否还有其他差异?

最佳答案

Why does round off using string constructor give a different result than the others?

因为这是您实际上唯一一次传递正好为 4.645 的值。其余时间,您传递的 double 值接近 4.645,这实际上不是 4.645,而是 4.6449999999999999573674358543939888477325439453125。

您可以使用 BigDecimal.valueOf(double) 创建 BigDecimal 值,该值可以有效地解析 double 值的规范字符串表示形式 - < em>然后你会得到与String相同的结果。

关于java - 使用字符串和 (int, long, double) 构造函数的 BigDecimal 舍入差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28064543/

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