Java的double.MAX_VALUE?(Java double.MAX_VALUE?)

2019-08-31 18:08发布

对于我的任务,我必须创建一个气量计系统的燃气公司,让员工创造新的负荷消费账户,并与服用(存放)钱从自己的帐户以及修改姓名和单位成本等数据。

我创建了我的构造,甚至在重载的方法加入,虽然我目前运行到一个问题开始时我的方法之一,我叫押金 ,这应该从用户帐户拿钱,而其他的方法,如recordUnits允许员工进口多少单位客户使用的燃气表读数,并更新客户帐户,这基本上是什么客户欠公司的平衡。

当只有预置信息测试程序尝试启动存款方法我得到这个时

Account.deposit(Double.MAX_VALUE);

我也不太清楚这是什么意思,似乎无法找到让过去吧反正!

测试数据和代码如下所示:

public class TestGasAccount 

{
    public static void main (String [] args)
    {
        GasAccount Account = new GasAccount (223,"Havana","TQ",1000);

        Account.getAccNo();
        Account.getName();
        Account.getAddress();
        Account.getUnits();
        Account.getBalance();
        Account.recordUnits(1000);
        Account.getUnits();
        Account.getBalance();
        Account.deposit(Double.MAX_VALUE);
    }
}

打破

public class GasAccount 
{
    private int intAccNo;
    private String strName;
    private String strAddress; 
    private double dblBalance;
    private double dblUnits;
    protected double dblUnitCost = 0.02; 

     public GasAccount(int intNewAccNo,String strNewName,String strNewAddress,double dblNewUnits)
     {
         intAccNo = intNewAccNo;
         strName = strNewName;
         strAddress = strNewAddress;
         dblUnits = dblNewUnits;
         dblBalance = dblNewUnits * dblUnitCost;
     }

     public GasAccount (int intNewAccNo, String strNewName, String strNewAddress)
     {
         intAccNo = intNewAccNo;
         strName = strNewName;
         strAddress = strNewAddress;
     }

     public double deposit (Double dblDepositAmount)
     {
        dblBalance = dblBalance - dblDepositAmount; 
        return dblBalance;
     }

     public String recordUnits (double dblUnitsUsed)
     {
         double dblTempBalance;

         dblTempBalance = dblUnitsUsed * dblUnitCost;
         dblBalance = dblBalance + dblTempBalance;
         dblUnits = dblUnits + dblUnitsUsed;

         return "Transaction Successful"; 
     }

     public int getAccNo ()
     {
         System.out.println(intAccNo);
         return intAccNo;
     }

     public String getName()
     {
         System.out.println(strName);
         return strName; 
     }

      public String getAddress()
     {
         System.out.println(strAddress);
         return strName; 
     }

     public double getBalance()
     {
         System.out.println("£"+dblBalance);
         return dblBalance; 
     }

     public double getUnitCost()
     {

         return dblUnitCost;
     }

     public double getUnits ()
     {
         System.out.println(dblUnits);
         return dblUnits;
     }

     public void updateUnitCost (double dblNewUnitCost)
     {
         dblUnitCost = dblNewUnitCost;

     }

}

Answer 1:

Double.MAX_VALUE是双可以代表(某处大约1.7 * 10 ^ 308)的最大值。

这应该在一些计算题结束后,如果您尝试减去一个数据类型的最大可能值。

即使当你与金钱打交道,你不应该使用浮点值,尤其是在这个四舍五入可能会导致问题(你将不得不多或更少的钱在你的系统中即可)。



Answer 2:

在这里复活死者,但以防万一有人绊倒对这个喜欢自己。 我知道从哪里得到双重的最大值时,(更)有趣的部分是,他们是如何得到这个数字。

双具有64位。 第一个是保留符号。

接下来的11表示指数(即1023偏置)。 这只是另一种方式来表示正/负值。 如果有11位,然后最大值为1023。

再就是持有尾数52位。

这是很容易计算像这样,例如:

public static void main(String[] args) {

    String test = Strings.repeat("1", 52);

    double first = 0.5;
    double result = 0.0;
    for (char c : test.toCharArray()) {
        result += first;
        first = first / 2;
    }

    System.out.println(result); // close approximation of 1
    System.out.println(Math.pow(2, 1023) * (1 + result));
    System.out.println(Double.MAX_VALUE);

} 

您也可以按相反的顺序证明了这一点:

    String max = "0" + Long.toBinaryString(Double.doubleToLongBits(Double.MAX_VALUE));

    String sign = max.substring(0, 1);
    String exponent = max.substring(1, 12); // 11111111110
    String mantissa = max.substring(12, 64);

    System.out.println(sign); // 0 - positive
    System.out.println(exponent); // 2046 - 1023 = 1023
    System.out.println(mantissa); // 0.99999...8


Answer 3:

这指出Account.deposit(Double.MAX_VALUE); 它存物值设置的MAX值Double procced运行测试dataType.to。



文章来源: Java double.MAX_VALUE?
标签: java double