英文:
How to get integer and fraction portions of a BigDecimal in Java
问题
对于类似于 42.7 的 BigDecimal
数字,我该如何将其分解以获得整数部分(42)和小数分数部分(0.7)?
我想要将它们都作为 BigDecimal
对象检索出来。但如果有限,我将从它们中创建 BigDecimal
对象。
英文:
For a BigDecimal
number such as 42.7, how can I tear this apart to get the integer part (42) and the decimal fractional part (0.7)?
I would like to retrieve both as BigDecimal
objects. But I will take what I can get and make BigDecimal
object from them.
答案1
得分: 2
# tl;dr
myBigDecimal
.divideAndRemainder( BigDecimal.ONE )
[ 0 ] // 整数部分
…and…
[ 1 ] // 小数部分
# `BigDecimal::divideAndRemainder`
[`BigDecimal`][1] 类提供了一些方法来实现这个目标。
[`BigDecimal::divideAndRemainder`][2] 方法会将原始数除以另一个数。结果是一个包含两个 `BigDecimal` 对象的数组,第一个对象是整数部分,第二个对象是小数部分。
要实现你的目标,我们只需要除以 1。`BigDecimal` 类提供了一个表示数字 1 的常量对象:[`BigDecimal.ONE`][3]。
```java
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);
<details>
<summary>英文:</summary>
# tl;dr
myBigDecimal
.divideAndRemainder( BigDecimal.ONE )
[ 0 ] // for integer part
…and…
[ 1 ] // for fraction part
# `BigDecimal::divideAndRemainder`
The [`BigDecimal`][1] class offers some methods for this.
The [`BigDecimal::divideAndRemainder`][2] method divides your original number by another number. The result is an array of two `BigDecimal` objects, the first being the integer portion and the second being the fraction amount.
To achieve your goal, we merely need to divide by one. The `BigDecimal` class offers a constant object for the value of one: [`BigDecimal.ONE`][3].
```java
BigDecimal input = new BigDecimal( "42.7" ) ;
BigDecimal[] parts = input.divideAndRemainder( BigDecimal.ONE );
Dump to console.
System.out.println( Arrays.toString( parts ) );
>[42.0, 0.7]
Grab each piece from the array.
BigDecimal input = new BigDecimal( "42.7" ) ;
BigDecimal[] parts = input.divideAndRemainder( BigDecimal.ONE );
BigDecimal integerPart = parts[ 0 ] ;
BigDecimal fractionPart = parts[ 1 ] ;
If you only need one part:
myBigDecimal.divideAndRemainder( BigDecimal.ONE )[ 0 ]
integer partmyBigDecimal.divideAndRemainder( BigDecimal.ONE )[ 1 ]
fraction part
Addition puts them together again.
BigDecimal humptyDumpty = integerPart.add( fractionPart ) ;
答案2
得分: 2
setScale()
我认为我会选择使用 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
在我看来,这段代码很容易阅读。
英文:
setScale()
I think I’d go for 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
It seems to me to be clear to read.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论