Java double.MAX_VALUE?

大家好,我是计算机系统开发的第一年,所以我对Java很新,掌握了基础知识!

对于我的第一项任务,我必须为燃气公司创建一个燃气表系统,以允许员工创建新的客户账户并修改名称和单位成本等数据以及从他们的账户中存入(存入)资金。

我已经创建了我的构造函数,甚至添加了一个重载方法,虽然我在启动我的一个名为deposit的方法时遇到了问题,这应该从用户帐户中获取资金,而其他方法如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; } } 

这只是我的代码的基础,我有更多的东西要去,但这有希望给你一个想法。

先感谢您

Double.MAX_VALUE是double可以表示的最大值(大约1.7 * 10 ^ 308)。

如果您尝试减去数据类型的最大可能值,则应该在某些计算问题中结束。

即使在处理金钱时,也不应该使用浮点值,尤其是在舍入时可能会导致问题(那么您的系统中的资金将要多得多或者少)。

在这里复活死者,但万一有人像我一样偶然发现这一点。 我知道在哪里可以获得双倍的最大值,(更有趣的)部分是他们如何得到这个数字。

double有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()) { if (c == '1') { 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); } 

您也可以按相反的顺序certificate这一点:

  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 

这表明Account.deposit(Double.MAX_VALUE); 它将存放值设置为Double dataType的MAX值。以便运行测试。