在Java中,我正在使用BigDecimal
类,我的部分代码要求我从中提取int部分。 BigDecimal
似乎没有任何内置方法可以帮助我获取BigDecimal
小数点前的数字。
例如:
BigDecimal bd = new BigDecimal("23452.4523434");
我想从上面代表的数字中提取23452
。最好的方法是什么?
答案 0 :(得分:5)
取决于您的意思"提取"。提取结果的类型是什么?另一个BigDecimal
,BigInteger
,int
,long
,String
或其他?
以下是所有人的代码:
BigDecimal result1 = bd.setScale(0, RoundingMode.DOWN);
BigInteger result2 = bd.toBigInteger();
int result3 = bd.intValue(); // Overflow may occur
long result4 = bd.longValue(); // Overflow may occur
String result5 = bd.toBigInteger().toString();
String result6 = bd.setScale(0, RoundingMode.DOWN).toString();
NumberFormat fmt = new DecimalFormat("0");
fmt.setRoundingMode(RoundingMode.DOWN);
String result7 = fmt.format(bd);
舍入说明:
RoundingMode.DOWN
- 舍入模式为向零舍入。切勿在废弃分数之前增加数字(即截断)。请注意,此舍入模式永远不会增加计算值的大小。
toBigInteger()
- 将此BigDecimal
转换为BigInteger
。此转换类似于 Java™语言规范的section 5.1.3中定义的从<{1}}到double
的缩小基元转换:此long
的任何小数部分将被丢弃。请注意,此转换可能会丢失有关BigDecimal
值精确度的信息。
intValue()
/ longValue()
- 将此BigDecimal
转换为BigDecimal
/ int
。此转换类似于 The Java™的5.1.3部分中定义的从<{1}}到long
/ double
的缩小基元转换此int
的语言规范:任何小数部分将被丢弃,如果结果为&#34; long
&# 34;太大而不适合BigDecimal
,只返回低位32/64位。
从描述中可以看出,所有4个丢弃小数部分,即向零舍入,即截断该值。
答案 1 :(得分:3)
bd.toBigInteger()
请参阅https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#toBigInteger()
上的文档