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

新手上路,请多包涵

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

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

我怎样才能解决这个问题?

原文由 ema 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 784
2 个回答

要将整数(或 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 );
}

原文由 Sheepy 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您知道要寻找什么,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();

原文由 Jeroen Steenbeeke 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题