将double变量传递给具有长参数

时间:2018-03-18 09:02:03

标签: java math double overflow long-integer

我有一个带双参数的构造函数,需要保留6个十进制数。要将数字转换为(分子,分母)格式,它会将数字传递给另一个接受长参数的函数。

// A double value (6 decimal will be used)
public DoubleToLong(double d)
{
    System.out.println("Double is " + d);          //  Double is 9.2233720368547E13
    convert((long) (d * 1000000), 1000000);
}

public void convert(long num, long den)
{

    System.out.println("Numerator: " + num + " Denominator: " + den);  // Numerator: 9223372036854775807 Denominator: 1000000
}

当9223372036854L传递给构造函数时, 分子:9223372036853999616分母:1000000 - > (OK)

当92233720368547L传递给构造函数时, 分子:9223372036854775807分母:1000000 - > (NOK)

与1000000相乘时发生溢出。如何修改构造函数以使用所有长值。

1 个答案:

答案 0 :(得分:1)

这里的问题是长的最大尺寸。要避免此问题,您需要使用BigDecimal

但是你还需要重写convert函数才能使用BigDecimal。