我正在写一个小程序来检查燃料状态。这种方法是在停止前显示燃油油位。
public String fuelLevelStart(String AccountID, String DeviceID, long time)
{
DBCamera objcmr = new DBCamera();
String str="-";
double fuelStart=0;
try
{
fuelStart= objcmr.FuelBeforeStop(AccountID,DeviceID,time);
if(fuelStart==0.0)
{
str="-";
}
else
{
fuelStart= round(fuelStart, 2);
str=Double.toString(fuelStart);
}
}
catch(Exception e){
}
return str;
}
这是在车辆停止后检查:
public String fuelLevelEnd(String AccountID, String DeviceID, long time, double fuel)
{
DBCamera objcmr = new DBCamera();
String str="-";
double fuelStart=0;
try
{
List<Double> list = objcmr.FuelAfterStop(AccountID,DeviceID,time);
if(list.size()<1)
{
if(fuel<=0)
str="-";
else
str=Double.toString(round(fuel, 2));
}
else
{
fuelStart= list.get(0);
if(fuelStart==0)
str="-";
else
str=Double.toString(round(fuelStart, 2));
}
}
catch(Exception e){
str="aa";
}
return str;
}
我的问题是如何计算这两个指数以显示所用燃料的总量。算法很简单:按结束级别减去起始级别,但是我对从这两种方法获得最终结果的方式感到困惑。有人能给我任何想法吗?
答案 0 :(得分:1)
使用Double.parseDouble()将字符串结果转换回双精度数。但首先检查函数是否返回“ - ”字符串,所以例如在启动燃料的情况下你会说像
if (startFuel.equals("-")) {
startFuelValue = 0.0;
}
else {
startFuelValue = Double.parseDouble(startFuel);
}
但请问,为什么你的方法会返回字符串而不是双倍?
您应该将fuelLevelStart方法更改为
public double fuelLevelStart(String AccountID, String DeviceID, long time){
//compute the fuel level
return fuelStart;
}
当你想打印fuelStart等级0的“ - ”符号时,只需使用和if语句。
答案 1 :(得分:1)
根据@Francois-Xavier Laviron的解决方案,你可以像这样解决你的问题:
public double usedFuel(String AccountID, String DeviceID, long time, double fuel){
Double useFuel = 0.0;
try{
useFuel = Double.parseDouble(fuelLevelStart(AccountID, DeviceID, time)) - Double.parseDouble(fuelLevelEnd(AccountID, DeviceID, time, fuel));
System.out.printf(" ",useFuel);
}
catch(Exception e){
}
return useFuel;
}
如果你在方法中保留String。
答案 2 :(得分:0)
检查返回的值是否为数字,然后使用Double.parse(String s)转换它们。然后做数学。
答案 3 :(得分:0)
你可能有充分的理由将你的油位保存为String,但是在需要显示之前将它们保持在自然类型(比如说Double)是一个很好的经验法则,直到那时抛出并捕获异常值时的异常值发生。
public Double fuelLevelStart(String AccountID, String DeviceID, long time) throws FuelException
{
DBCamera objcmr = new DBCamera();
String str="-";
double fuelStart=0;
try
{
fuelStart= objcmr.FuelBeforeStop(AccountID,DeviceID,time);
}
catch(Exception e){
throw new FuelException("cannot perform objcmr.FuelBeforeStop");
}
if(fuelStart==0.0)
{
throw new FuelException("empty");
}
fuelStart= round(fuelStart, 2);
return fuelStart;
}
对fuelLevelEnd执行等效更改,然后调用
...
Double usedFuel;
try{
usedFuel = fuelLevelStart(AccountID, DeviceID, time) - fuelLevelEnd(AccountID, DeviceID, time, fuel);
// display the result for instance:
System.out.printf("fuel consumption %.2f %n",usedFuel);
}
catch(FuelException e){
// display or re-throw more general exception
}