提取BigDecimal的int部分?

时间:2016-11-17 20:52:11

标签: java

在Java中,我正在使用BigDecimal类,我的部分代码要求我从中提取int部分。 BigDecimal似乎没有任何内置方法可以帮助我获取BigDecimal小数点前的数字。

例如:

BigDecimal bd = new BigDecimal("23452.4523434");

我想从上面代表的数字中提取23452。最好的方法是什么?

2 个答案:

答案 0 :(得分:5)

取决于您的意思"提取"。提取结果的类型是什么?另一个BigDecimalBigIntegerintlongString或其他?

以下是所有人的代码:

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)