如何在 Java 中获取 BigDecimal 的整数和小数部分

问题描述 投票:0回答:2

对于像 42.7 这样的

BigDecimal
数字,我怎样才能将其分解以获得整数部分(42)和小数部分(0.7)?

我想将两者作为单独的

BigDecimal
对象进行检索。但我会利用我能得到的东西并从中制作
BigDecimal
对象。

java integer bigdecimal
2个回答
4
投票

tl;博士

myBigDecimal
.divideAndRemainder( BigDecimal.ONE )
[ 0 ]                                    // for integer part

…还有…

[ 1 ]                                    // for fraction part

BigDecimal::divideAndRemainder

BigDecimal
类为此提供了一些方法。

BigDecimal::divideAndRemainder
方法将您的原始数字除以另一个数字。结果是两个
BigDecimal
对象的数组,第一个是整数部分,第二个是小数部分。

为了实现您的目标,我们只需除以一即可。

BigDecimal
类提供值为 1 的常量对象:
BigDecimal.ONE

BigDecimal input = new BigDecimal( "42.7" ) ;
BigDecimal[] parts = input.divideAndRemainder( BigDecimal.ONE );

转储到控制台。

System.out.println( Arrays.toString( parts ) );

[42.0, 0.7]

从阵列中抓取每一个部分。

BigDecimal input = new BigDecimal( "42.7" ) ;
BigDecimal[] parts = input.divideAndRemainder( BigDecimal.ONE );
BigDecimal integerPart = parts[ 0 ] ;
BigDecimal fractionPart = parts[ 1 ] ;

如果您只需要一部分:

  • myBigDecimal.divideAndRemainder( BigDecimal.ONE )[ 0 ]
    整数部分
  • myBigDecimal.divideAndRemainder( BigDecimal.ONE )[ 1 ]
    小数部分

加法将它们再次放在一起

BigDecimal humptyDumpty = integerPart.add( fractionPart ) ;

2
投票

设置比例()

我想我会选择

setScale()

    BigDecimal bd = new BigDecimal("42.7");
    
    BigDecimal integerPart = bd.setScale(0, RoundingMode.DOWN);
    BigDecimal fractionalPart = bd.subtract(integerPart);
    
    System.out.println(integerPart);
    System.out.println(fractionalPart);
42
0.7

我觉得读起来很清楚。

© www.soinside.com 2019 - 2024. All rights reserved.