温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java BigDecimal任意精度整数怎么读入

发布时间:2026-10-23 09:19:24 来源:亿速云 阅读:97 作者:小樊 栏目:编程语言

在 Java 里,BigDecimal 本身并不是“任意精度整数”,它是任意精度的十进制浮点数(可以带小数)。
如果你说的是任意精度整数,那应该用 BigInteger;如果是“用 BigDecimal 读入整数值”,下面分别说明。


一、如果是「任意精度整数」→ 用 BigInteger

从字符串读入(最常用、最安全)

import java.math.BigInteger;

BigInteger a = new BigInteger("123456789012345678901234567890");

从控制台读入

import java.util.Scanner;
import java.math.BigInteger;

Scanner sc = new Scanner(System.in);
BigInteger a = sc.nextBigInteger();

从文件读入

BigInteger a = new BigInteger(Files.readString(Path.of("num.txt")).trim());

二、如果是「用 BigDecimal 读入整数(不丢精度)」

✅ 推荐:从字符串构造(不会丢精度)

import java.math.BigDecimal;

BigDecimal a = new BigDecimal("123456789012345678901234567890");

从控制台读入

Scanner sc = new Scanner(System.in);
BigDecimal a = new BigDecimal(sc.next());

❌ 不推荐:用 double 构造(可能丢精度)

BigDecimal bad = new BigDecimal(0.1); // 实际是 0.1000000000000000055...

三、常见注意点(很重要)

1️⃣ 永远用字符串构造

new BigDecimal("1.23")  ✅
new BigDecimal(1.23)    ❌

2️⃣ 除法必须指定精度和舍入模式

BigDecimal r = a.divide(b, 10, RoundingMode.HALF_UP);

3️⃣ 比较是否相等用 compareTo

a.compareTo(b) == 0  ✅
a.equals(b)          ❌(会区分 scale)

四、一句话总结

  • 任意精度整数 → 用 BigInteger
  • 任意精度小数 → 用 BigDecimal
  • 读入方式:优先用 字符串构造
  • 不要从 double 直接转

如果你能说清楚是 整数运算 还是 小数运算,我可以给你更合适的代码示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手