我遇到了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手机上运行的日食中尝试过它 两者都显示相同的结果。
答案 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