如何在Java中将整数转换为BigDecimal

14

我想创建一个方法,计算整数和BigDecimal的乘积。我在Google和论坛上搜索过,但都没有找到合适的。

import java.math.BigDecimal;
private Integer quantite;
private BigDecimal prixUnit;

public Integer getQuantite() {
        return quantite;
}

public void setQuantite(Integer quantite) {
    this.quantite = quantite;
}


public BigDecimal getPrixUnit() {
    return prixUnit;
}

public void setPrixUnit(BigDecimal prixUnit) {
    this.prixUnit = prixUnit;
}

public BigDecimal methCal(BigDecimal quantite, BigDecimal prixUnit) {

    this.prixUnit=prixUnit;
    BigDecimal j = new BigDecimal(quantite);
    this.j = quantite;

    return quantite*prixUnit;
}

我该怎么修复这个问题?


请展示你目前的代码,你的尝试,并详细解释输入+期望输出。 - luk2302
1
BigDecimal.valueOf(13). - Joop Eggen
5
BigDecimal.valueOf 是一个 Java 方法,用于将长整型转换为 BigDecimal 对象。查阅文档是使用该方法的第一步。 - AxelH
我 @luk2302 添加了代码。 - ema
4个回答

30

要将整数(或byte/short/float/double)与BigInteger(或BigDecimal)相乘,必须先将本机数字转换为BigInteger/BigDecimal。

// int parameter can be int or Integer
public static BigInteger multiply ( int a, BigInteger b ) {
   return BigInteger.valueOf( a ).multiply( b );
}

// BigInteger <> BigDecimal
public static BigDecimal multiply ( int a, BigDecimal b ) {
   return BigDecimal.valueOf( a ).multiply( b );
}

// same for add, subtract, divide, mod etc.

注意:BigDecimalBigInteger上的valueOf不同于new,并且有不同的原因。在这两种情况下,我建议使用valueOf而不是new

我看到你添加了你的代码,很好。 它不能工作是因为Integer与BigDecimal混合使用,并且*不能与BigDecimal一起使用。 如果你将其与我的代码进行比较,修复应该是显而易见的:

public BigDecimal methCal ( int quantite, BigDecimal prixUnit ) {
    return BigDecimal.valueOf( quantite ).multiply( prixUnit );
}

8

如果您知道要查找什么,Google肯定可以帮助您:

https://docs.oracle.com/javase/9/docs/api/java/math/BigDecimal.html#BigDecimal-int-

这是BigDecimal的构造函数之一,它允许您执行以下操作:

BigDecimal five = BigDecimal.valueOf(5);
BigDecimal seven = BigDecimal.valueOf(2).add(five);

既然您说您想要将int和BigDecimal相乘,那么可以按照以下方式实现:

BigDecimal result = yourBigDecimal.multiply(BigDecimal.valueOf(yourInt));

假设你想将结果转换为int类型:

int intResult = result.intValue();

请记住,这会忽略小数部分。如果你想进行四舍五入,请使用以下代码:
int intResult = result.round(0, RoundingMode.HALF_UP).intValue();

对于通用目的(浮点数值),我建议您查看Sheepy的回答valueOf对于浮点数值更有效率,这是更好的方法。 - AxelH
@AxelH,我的问题和回答都没有涉及到浮点数作为输入,最接近的相关等效项采用long作为参数。话虽如此,valueOf似乎会为值0-10产生缓存值,这比每次创建一个新的BigDecimal更有效,因此valueOf确实是更好的选择。 - Jeroen Steenbeeke
我说的是通用目的。这并不是针对你的回答,而是为了在使用浮点数时提供更多信息。 - AxelH

1

试试这个:

import java.math.*;

public class calculator {

    public static void main(String[] args) {

        BigDecimal value1 = new BigDecimal("3383878445");
        BigDecimal returnValue = calculation(2, value1);
        System.out.println("value is:" + returnValue);
    }

    public static BigDecimal calculation(int no1, BigDecimal no2) {
        BigDecimal value = BigDecimal.valueOf(no1).multiply(no2);
        return value;
    }
}

0

Java API 中的这些方法将会很有帮助。

public BigDecimal multiply​(BigDecimal multiplicand)

返回一个BigDecimal对象,其值为(this × multiplicand),其标度为(this.scale() + multiplicand.scale())。

参数: multiplicand - 要乘以此BigDecimal的值。 返回: this * multiplicand

public BigDecimal​(int val)

将int类型转换为BigDecimal类型。BigDecimal的精度为零。

参数: val - 要转换为BigDecimal的int值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接