比较整数和浮点数

时间:2017-02-12 05:18:39

标签: c

我已使用此代码生成root,如果输出不是整数,则应返回-1。

1
5  3125

但如果我提供输入

5

它应该提供-1,但它会提供Map m=request.getParameterMap(); Set<String> keys = m.keySet(); ArrayList<String[]> valuesArr = new ArrayList<>(m.values()); out.print("<h1> Your Input Based on MapParamters</h1><br><br>"); int i = 0; for (int j = 0; j < keys.size(); j++) { for (String key : keys) { for (String value : Arrays.copyOfRange(valuesArr.get(i), j, valuesArr.get(i).length)) { out.println(key + " : " + value + " "); i++; break; } } i=0; out.println("<br/>") }

2 个答案:

答案 0 :(得分:1)

ret并不完全是5.00000,您只是不能在小数点后打印足够的数字来查看差异。将格式更改为%.20lf,它会显示5.00000000000000088818,但不等于(double)5

这是因为pow()适用于浮点数,并且引入了一些不准确之处。 (double)1/5无法完全以二进制浮点表示。见Is floating point math broken?

答案 1 :(得分:0)

原因是这段代码:

if(ret!=(double)reti){
    reti=-1;
}

reti是一个整数值 - 将其转换为double会将其转换为双重表示,但很可能 等于ret。这是浮点数的常见问题 - 一般来说,你永远不应该比较纯粹的平等。相反,您应该比较两个数字之间的差异并确认它在某个可接受的误差范围内(例如0.00001)。