Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
截断double或向decimal-Java添加额外的0_Java_Formatting_Double_Truncate - Fatal编程技术网

截断double或向decimal-Java添加额外的0

截断double或向decimal-Java添加额外的0,java,formatting,double,truncate,Java,Formatting,Double,Truncate,这可能是重复的,但我找不到任何与我的代码相关的答案 我正试图在Java中截断一个方法(用于计算费用)的结果。然后,我尝试将结果写入一个文本文件,但它没有显示出应有的效果。这是我得到的,也是我想要它回报的: 费用结果为8.4,应返回8.40 费用结果为8.0,应返回8.00 等等。。。有什么建议吗 这是我的整个方法代码: public Double calculateFee(Parcel pcl) { // Get type of parcel (E, S or X) St

这可能是重复的,但我找不到任何与我的代码相关的答案

我正试图在Java中截断一个方法(用于计算费用)的结果。然后,我尝试将结果写入一个文本文件,但它没有显示出应有的效果。这是我得到的,也是我想要它回报的:

  • 费用结果为8.4,应返回8.40
  • 费用结果为8.0,应返回8.00
  • 等等。。。有什么建议吗

    这是我的整个方法代码:

    public Double calculateFee(Parcel pcl) {    
        // Get type of parcel (E, S or X)
        String typeOfParcel = pcl.getParcelID().substring(0,1);
        // Formula for calculating fee
        Double fee = (double) 1 + Math.floor(pcl.getVolume()/28000) + (pcl.getDays()-1);
    
        // apply a discount to parcels of type "S"
        if (typeOfParcel.equalsIgnoreCase("S")) {
            fee = fee * 0.9;
        }
    
        // apply a discount to parcels of type "X"
        else if (typeOfParcel.equalsIgnoreCase("X")) {
            fee = fee * 0.8; 
        } 
    
        // This is what I tried:
        // Tried also using #.##, but no result
        DecimalFormat decim = new DecimalFormat("0.00");
        fee = Double.parseDouble(decim.format(fee));
    
        return fee;     
    } 
    

    一种方法是使用String.format()

    请注意,Double不包含其值的格式化表示形式


    有关格式字符串的其他详细信息可用

    一种方法是使用String.format()

    请注意,Double不包含其值的格式化表示形式


    有关格式字符串的其他详细信息可用

    这里的问题不在于格式错误。您正在使用以下命令格式化您的double文件:

    decim.format(fee);
    
    然后,您将该字符串解析回一个Double,从而丢失格式:

    Double.parseDouble(...
    

    只要返回一个字符串而不是一个Double,并且不要使用Double.parseDouble。

    这里的问题不是格式化错误。您正在使用以下命令格式化您的double文件:

    decim.format(fee);
    
    然后,您将该字符串解析回一个Double,从而丢失格式:

    Double.parseDouble(...
    

    只返回字符串而不是Double,不要使用Double.parseDouble。

    为什么要再次解析格式化的Double以返回Double?只需返回由
    DecimalFormat.parse
    @RohitJain返回的字符串形式是正确的:这是无意义的代码为什么作为格式化代码的结果返回
    double
    ,而不是
    string
    ?我不知道格式化不能应用于double类型。对不起,伙计们,初学者的错误。为什么你们要再次解析格式化的double来返回double?只需返回由
    DecimalFormat.parse
    @RohitJain返回的字符串形式是正确的:这是无意义的代码为什么作为格式化代码的结果返回
    double
    ,而不是
    string
    ?我不知道格式化不能应用于double类型。对不起,伙计们,初学者的错误。嗯。。现在我明白我做错了什么。这是有道理的!谢谢@aglassman的解释。你应该说用什么代替。parseDouble@Wrong我回答的最后一行解释了该怎么做。嗯。。现在我明白我做错了什么。这是有道理的!谢谢@aglassman的解释。你应该说用什么代替。parseDouble@Wrong我回答的最后一行解释了该怎么做。