大家好,我是计算机系统开发的第一年,所以我对Java很新,掌握了基础知识!
对于我的第一项任务,我必须为燃气公司创建一个燃气表系统,以允许员工创建新的客户账户并修改名称和单位成本等数据,并从他们的账户中存入(存入)资金.
我已经创建了我的构造函数,甚至添加了一个重载方法,虽然我在启动我的一个名为deposit的方法时遇到了问题,这应该从用户帐户获取资金,而其他方法如recordUnits允许员工输入燃气表读数显示客户使用了多少单位,并更新客户账户的余额,这基本上是客户欠公司的.
在尝试启动存款方法时使用预设信息测试程序时,我得到了这个
Account.deposit(Double.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)
我不太清楚这意味着什么,似乎无法找到过去它!如果这已经发布,我会道歉,虽然我已经四处寻找合适的答案无济于事.
测试数据和代码如下所示:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
打破
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这只是我的代码的基础,我有更多的东西要去,但这有希望给你一个想法.
先感谢您
Kuc*_*chi 26
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()) {
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);
}
Run Code Online (Sandbox Code Playgroud)
您也可以按相反的顺序证明这一点:
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
Run Code Online (Sandbox Code Playgroud)