BigDecimal精度由输入值决定无默认

小豆丁 25天前 ⋅ 28 阅读
聊天记录
头像

BigDeciaml默认精度是1吗?

头像

不,BigDecimal没有固定的"默认精度",它的精度完全取决于你创建时的值。

精度(scale)的确定规则

1. 通过字符串创建

JAVA
BigDecimal a = new BigDecimal("53");     // scale = 0 (整数)
BigDecimal b = new BigDecimal("53.0");   // scale = 1  
BigDecimal c = new BigDecimal("53.00");  // scale = 2
BigDecimal d = new BigDecimal("53.000"); // scale = 3

2. 通过double创建(不推荐)

JAVA
BigDecimal e = new BigDecimal(53.0);     // scale 不确定,可能有精度问题
BigDecimal f = BigDecimal.valueOf(53.0); // 推荐方式,scale = 1

3. 通过整数创建

JAVA
BigDecimal g = new BigDecimal(53);       // scale = 0
BigDecimal h = BigDecimal.valueOf(53);   // scale = 0

验证示例

JAVA
System.out.println(new BigDecimal("53").scale());     // 0
System.out.println(new BigDecimal("53.0").scale());   // 1  
System.out.println(new BigDecimal("53.00").scale());  // 2
System.out.println(new BigDecimal("53.000").scale()); // 3

重要说明

BigDecimal的精度是由输入值决定的:

  • 整数部分:精度为0
  • 小数位数:精度等于实际的小数位数
  • 尾部零:会保留并影响精度

最佳实践

JAVA
// 推荐:使用字符串构造,避免精度问题
BigDecimal price = new BigDecimal("53.00"); // 明确指定精度为2

// 不推荐:使用double构造
BigDecimal bad = new BigDecimal(53.0);     // 可能有不可预期的精度

所以没有"默认精度为1"的说法,精度完全取决于你如何创建BigDecimal对象。

全部评论: 0

    我有话说: