如何计算java中的两个String方法

时间:2014-09-23 07:42:09

标签: java

我正在写一个小程序来检查燃料状态。这种方法是在停止前显示燃油油位。

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;
    }

我的问题是如何计算这两个指数以显示所用燃料的总量。算法很简单:按结束级别减去起始级别,但是我对从这两种方法获得最终结果的方式感到困惑。有人能给我任何想法吗?

4 个答案:

答案 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
}