Java 提取大小数的整数部分?
在Java中,我使用的是Java 提取大小数的整数部分?,java,Java,在Java中,我使用的是BigDecimal类,部分代码要求我从中提取int部分BigDecimal似乎没有任何内置方法来帮助我获取BigDecimal小数点之前的数字 例如: BigDecimal bd = new BigDecimal("23452.4523434"); 我想从上面表示的数字中提取23452。最好的方法是什么?bd.toBigInteger() 查看位于的文档取决于“提取”的含义。提取结果的类型是什么?另一个BigDecimal、一个biginger、一个int、一个lon
BigDecimal
类,部分代码要求我从中提取int部分BigDecimal
似乎没有任何内置方法来帮助我获取BigDecimal
小数点之前的数字
例如:
BigDecimal bd = new BigDecimal("23452.4523434");
我想从上面表示的数字中提取23452
。最好的方法是什么?bd.toBigInteger()
查看位于的文档取决于“提取”的含义。提取结果的类型是什么?另一个
BigDecimal
、一个biginger
、一个int
、一个long
、一个字符串
,还是其他什么
以下是它们的代码:
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);
环行说明:
- -四舍五入模式为向零四舍五入。切勿在丢弃分数之前增加数字(即截断)。请注意,此舍入模式从不增加计算值的大小
- -将此
转换为BigDecimal
。这种转换类似于Java语言中定义的从biginger
到double
的缩小原语转换™ 语言规范:此long
的任何小数部分将被丢弃。请注意,此转换可能会丢失有关BigDecimal
值精度的信息BigDecimal
- /-将此
转换为BigDecimal
/int
。此转换类似于Java第节中定义的从long
到double
/int
的缩小原语转换™ 语言规范:此long
的任何小数部分都将被丢弃,如果生成的“BigDecimal
”太大,无法放入BigInteger
,则只返回低阶32/64位int
从描述中可以看出,所有4个舍弃分数部分,即向零舍入,也就是截断值。您希望整个非分数部分或任何符合
int
的部分吗?您能解释一下区别吗?我不确定您的意思“BigDecimal似乎没有任何内置方法来帮助我获取BigDecimal小数点之前的数字”:…BigDecimal的值可能比int
中的值大得多,因此取决于您是否关心这种情况,您可能需要转换为BigInteger,或者不转换为BigInteger。无论哪种方式,都有一个简单的内置函数来完成。有什么原因你不能使用吗?升级后的版本非常有用,而且完整的系列触感很好。有用的是对舍入的解释。“我猜结果1向下舍入到最接近的整数,但int和long转换不太清楚。”DavidFulton补充了舍入的解释