在Java中传递大数

时间:2018-08-06 18:12:37

标签: java bigdecimal

我想将值传递给使用大十进制数字的方法,但是我的程序显示编译器错误。

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()

3 个答案:

答案 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));