我想创建一个计算乘法整数和大数的方法。 我在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 ;
}
有人可以帮助我吗?
答案 0 :(得分:7)
要将整数(或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.
注意:
valueOf
与new
不同,BigDecimal和BigInteger的原因各不相同。 在这两种情况下,我建议valueOf
超过new
。
我看到你添加了你的代码,很好。
它不起作用,因为Integer与BigDecimal混合,而*
也不适用于BigDecimal。
如果将它与我的代码进行比较,修复应该是显而易见的:
public BigDecimal methCal ( int quantite, BigDecimal prixUnit ) {
return BigDecimal.valueOf( quantite ).multiply( prixUnit );
}
答案 1 :(得分:2)
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();
答案 2 :(得分:0)
Java API中的这些方法会很有用。
public BigDecimal multiply(BigDecimal multiplicand)
返回一个BigDecimal,其值为(this×multiplicand),其比例为(this.scale()+ multiplicand.scale())。
参数: multiplicand - 要乘以此BigDecimal的值。 返回: 这个*被乘数
public BigDecimal(int val)
将int转换为BigDecimal。 BigDecimal的比例为零。
参数: val - 要转换为BigDecimal的int值。
答案 3 :(得分:0)
试试这个:
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;
}
}