【发布时间】:2012-11-08 19:54:51
【问题描述】:
我正在尝试将 I 的值从 1 迭代到 0 或从 0 到 1。但我遇到了一些问题。 请检查以下代码:
double i = 1.0;
loop{ // Just use a loop to iterate the i. This is just a pseudocode.
// We can use while-loop or for-loop or timer.
// (I know there is no keyword "loop" in java)
i -=0.1;
if( i == 0.0){
// stop the loop
}
}
在上面的代码中,循环永远不会停止,因为在循环期间当 i = 0.8 - 0.1 时变量 i 将变为 0.7000000001。当 i = 0.1 - 0.1 时,我将有很多十进制数。所以它永远不会等于 0.0。
如果我对问题的描述对您来说不够清楚,我深表歉意。 对于专业程序员来说,这可能是一个非常简单的问题。但我无法弄清楚。请让我知道我做错了什么。
【问题讨论】:
-
if (i <= 0)最终会结束 - 但它可能会循环 10 或 11 次,具体取决于精度。更多关于双精度(缺乏)的信息:stackoverflow.com/questions/4937402/… -
您的担心是正确的。但是你的具体问题是什么?
-
您不能使用
double或float精确表示浮点值。因此,您使用的0.1和1.0不是精确表示。您应该使用BigDecimal来获得浮点数的精确表示。 -
@assylias 是正确的,它循环了 11 次然后到达 0。但我也不太明白这个问题。
-
@RohitJain:表示
double和float是浮点型类型。BigDecimal是 浮点小数点 类型。因此,例如,十进制 数字 0.5(即一半)在二进制中是 0.1,并且可以精确表示。 “浮点”只是使用两个整数值的任何表示:一个尾数和一个指数来移动“点”。
标签: java math loops double iteration