我遇到java双数据类型的问题

时间:2014-10-09 13:59:39

标签: java android

我遇到了java double数据类型的问题。问题是,在某些情况下,获得的结果是小数点后的非常大的位数。在计算器上进行相同的计算,手动几乎不能达到小数后的2位数。

代码如下:

public class Calculater {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String quantityInString="700g";
        int indexOfg=quantityInString.indexOf("g");
        String onlyQuantityInString=quantityInString.substring(0, indexOfg);
        int onlyQuantityInInt=Integer.parseInt(onlyQuantityInString);

        double perUnitCostOfThisItem=29.00;
        double returnFloat=0;
        returnFloat=(onlyQuantityInInt/(1000.00))*perUnitCostOfThisItem;
        System.out.println("returnFloat="+returnFloat);

    }

}

程序输出为:returnFloat=20.299999999999997

使用计算器的答案是20.3

我不知道为什么会这样? 我在笔记本电脑和Android手机上运行的日食中尝试过它 两者都显示相同的结果。

3 个答案:

答案 0 :(得分:0)

如果您需要知道双重行为的原因,请查看this

要格式化你的双倍,你可以通过

来完成
String.format("%.2f", floatValue);

请注意,这会将其格式化为2个位置。

您也可以使用DecimalFormat。一种使用方法:

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));

另一个是使用#.##格式构建它。

答案 1 :(得分:0)

试试这个:

float finalValue = Math.round(value * 100.0)/ 100.0;

答案 2 :(得分:0)

尝试此操作以进行精确计算。 BigDecimal比double更准确。

    String quantityInString="700g";
    int indexOfg=quantityInString.indexOf("g");
    String onlyQuantityInString=quantityInString.substring(0, indexOfg);
    BigDecimal onlyQuantityInInt= new BigDecimal(onlyQuantityInString);

    BigDecimal perUnitCostOfThisItem= new BigDecimal("29.00");
    BigDecimal returnFloat= new BigDecimal(onlyQuantityInString);
    returnFloat = returnFloat.divide(new BigDecimal("1000"));
    returnFloat = returnFloat.multiply(perUnitCostOfThisItem);
    System.out.println("returnFloat="+returnFloat);

如果你需要精确的计算,应该使用BigDecimal而不是float和double。

此代码的输出为:returnFloat = 20.300