我想将值传递给使用大十进制数字的方法,但是我的程序显示编译器错误。
package com.khalidFarik;
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
checknumbersinDecimals(12.3,12.2);
}
public static void checknumbersinDecimals(BigDecimal payment1,BigDecimal payment2){
payment1 = new BigDecimal("1230.23");
payment2 = new BigDecimal("1230.23");
BigDecimal number3= payment1.subtract(payment2);
System.out.println(number3.toString());
}
}
如何在主方法中将大十进制数传递给方法checknumbersinDecimals()
?
答案 0 :(得分:1)
将BigDecimal
对象传递给方法类似于将任何其他Object
引用传递给方法。创建一个新的BigDecimal对象,并将其作为参考传递。您可以使用以下语法
checknumbersinDecimals(new BigDecimal(12.3),new BigDecimal(12.2));
12.3
代表一个double
值。将其作为new BigDecimal(12.3)
的构造函数值传递会为其创建一个BigDecimal
引用
答案 1 :(得分:1)
您的方法接受BigDecimal
作为参数,但是您传递的是12.3,12.2
而不是double
的{{1}}。
您将BigDecimal
对象而不是BigDecimal
传递为参数,如下所示:
double
注意:使用BigDecimal(String)构造函数而不是BigDecimal(double)构造函数,因为使用后者会导致精度下降。 doc中正确提及的警告:
- 此构造函数的结果可能有些不可预测。一 可能假设用Java编写新的BigDecimal(0.1)会创建一个 BigDecimal恰好等于0.1(非标度值为1,其中 比例为1),但实际上等于 0.1000000000000000055511151231257827021181583404541015625。这是因为0.1不能精确地表示为双精度(或为此 物质,作为任何有限长度的二进制分数)。因此,价值 传递给构造函数的值不完全等于 0.1,尽管有外观。
另一方面,- String构造函数是完全可预测的:编写新的BigDecimal(“ 0.1”)创建 正如人们所期望的那样,一个BigDecimal恰好等于0.1。 因此,通常建议将String构造函数设置为 优先于此。
- 当必须将double用作来源时 对于BigDecimal,请注意,此构造函数提供了精确的 转换它与转换double的结果不同 使用Double.toString(double)方法转换为字符串,然后使用 BigDecimal(String)构造函数。要获得该结果,请使用静态 valueOf(double)方法。
答案 2 :(得分:0)
BigDecimal.valueOf(double)
是推荐使用的建议,而不是构造函数new BigDecimal()
,它可以为您提供传递的值。
checknumbersinDecimals(BigDecimal.valueOf(12.3), BigDecimal.valueOf(12.2));