【问题标题】:How to convert an integer to bigdecimal in Java如何在Java中将整数转换为bigdecimal
【发布时间】:2018-04-16 09:10:03
【问题描述】:

我想创建一个计算整数和大小数相乘的方法。我在谷歌和论坛上搜索,但没有找到任何东西。

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;
}

我该如何解决这个问题?

【问题讨论】:

  • 请展示您当前的代码、您的尝试并更详细地解释输入+预期输出。
  • BigDecimal.valueOf(13).
  • BigDecimal.valueOf ...文档是第一步。
  • 我@luk2302添加代码

标签: java integer bigdecimal


【解决方案1】:

要将整数(或 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.

注意:valueOfnew 不同,BigDecimalBigInteger 的原因也不同。 在这两种情况下,我都推荐valueOf 而不是new


我看到你添加了你的代码,很好。 它不起作用,因为 Integer 与 BigDecimal 混合在一起,而且 * 也不适用于 BigDecimal。 如果您将其与我的代码进行比较,则修复应该很明显:

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

【讨论】:

    【解决方案2】:

    如果您知道要寻找什么,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 answervalueOf 对浮点值更有效。这是一种更好的方法。
    • @AxelH 问题和我的答案都没有处理浮点作为输入,并且最接近的相关等效项需要 long as 参数。也就是说,valueOf 似乎会为值 0-10 生成缓存值,这比每次都创建一个新的 BigDecimal 更有效,因此 valueOf 确实是一个更好的选择。
    • 我说的是通用的。这并不反对您的回答,而是在使用浮点数的情况下提供更多信息。
    【解决方案3】:

    试试这个:

    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;
        }
    }
    

    【讨论】:

      【解决方案4】:

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

      public BigDecimal multiply​(BigDecimal multiplicand)
      

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

      参数: multiplicand - 与此 BigDecimal 相乘的值。 回报: this * 被乘数

      public BigDecimal​(int val)
      

      将 int 转换为 BigDecimal。 BigDecimal 的小数位数为零。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-19
        • 2017-09-16
        • 1970-01-01
        • 2022-09-23
        • 2016-06-15
        • 2018-11-29
        相关资源
        最近更新 更多