Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 提取大小数的整数部分?_Java - Fatal编程技术网

Java 提取大小数的整数部分?

Java 提取大小数的整数部分?,java,Java,在Java中,我使用的是BigDecimal类,部分代码要求我从中提取int部分BigDecimal似乎没有任何内置方法来帮助我获取BigDecimal小数点之前的数字 例如: BigDecimal bd = new BigDecimal("23452.4523434"); 我想从上面表示的数字中提取23452。最好的方法是什么?bd.toBigInteger() 查看位于的文档取决于“提取”的含义。提取结果的类型是什么?另一个BigDecimal、一个biginger、一个int、一个lon

在Java中,我使用的是
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
    转换为
    biginger
    。这种转换类似于Java语言中定义的从
    double
    long
    的缩小原语转换™ 语言规范:
    BigDecimal
    的任何小数部分将被丢弃。请注意,此转换可能会丢失有关
    BigDecimal
    值精度的信息

  • /-将此
    BigDecimal
    转换为
    int
    /
    long
    。此转换类似于Java第节中定义的从
    double
    int
    /
    long
    的缩小原语转换™ 语言规范:
    BigDecimal
    的任何小数部分都将被丢弃,如果生成的“
    BigInteger
    ”太大,无法放入
    int
    ,则只返回低阶32/64位


从描述中可以看出,所有4个舍弃分数部分,即向零舍入,也就是截断值。

您希望整个非分数部分或任何符合
int
的部分吗?您能解释一下区别吗?我不确定您的意思“BigDecimal似乎没有任何内置方法来帮助我获取BigDecimal小数点之前的数字”:…BigDecimal的值可能比
int
中的值大得多,因此取决于您是否关心这种情况,您可能需要转换为BigInteger,或者不转换为BigInteger。无论哪种方式,都有一个简单的内置函数来完成。有什么原因你不能使用吗?升级后的版本非常有用,而且完整的系列触感很好。有用的是对舍入的解释。“我猜结果1向下舍入到最接近的整数,但int和long转换不太清楚。”DavidFulton补充了舍入的解释