日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java中1和1.0_在Java中如何以0.1f增量在0.1f和1.0f之间进行迭代?

發布時間:2025/3/15 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中1和1.0_在Java中如何以0.1f增量在0.1f和1.0f之间进行迭代? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本問題已經有最佳答案,請猛點這里訪問。

Possible Duplicate:

Java floats and doubles, how to avoid that 0.0 + 0.1 + … + 0.1 == 0.9000001?

我在Java中遇到以下問題-我需要以0.1f的增量在0.1f和1.0f之間進行迭代,因此我希望輸出如下所示:

0.1

0.2

0.3

0.4

...

0.9

相反,當我這樣做時:

for(float i = 0.1f; i < 1f; i += 0.1f)

System.out.println(i);

我懂了

0.1

0.2

0.3

0.4

0.5

0.6

0.70000005

0.8000001

0.9000001

我想這與計算機表示分數的方式有關,但是我想知道為什么會這樣,以及是否有什么辦法可以阻止它。

謝謝。

您可以改用雙打嗎?

確實,這根本不可行。 沒有確切的值0.1可表示為浮點數或雙精度數。

"我想知道這是為什么"-簡短的答案是"舍入誤差"。 要獲得較長的答案,請閱讀以下內容-docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html。" ...如果有什么我可以阻止的事情"-簡短回答"不"。

在for循環中使用整數,以避免重復的浮點數學運算,這會增加浮點錯誤。

for (int i = 1; i < 10; i++)

{

float f = (float) i / 10.0f;

System.err.println(f);

}

您可以嘗試以下方法:

for(int i = 1; i < 10; i++)

System.out.println(i/10f);

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

您所看到的是浮點數固有的不準確性的結果,如果您不斷添加它們,這些自然就會累積,就像在發布的代碼中所做的那樣。 如果改為在循環中使用int,則避免進行float加法運算,因此也避免了錯誤累積。

為什么要投反對票?

我不是那個否決這個答案的人,但是如果我猜出來的話,因為您的輸出以0.0開頭,而不是0.1開頭。

@rgettman啊,是的-更改了1個字符,感謝您指出。我真的希望投票者會發表評論以表明這些事情。

浮點數是二進制的,不能很好地表示小數

如果適用,則以1/8或0.125進行迭代。

for(float i =1.0f;i<10f;i+=1f)

System.out.println(i/10f);`

很丑陋,但可以在這里使用(Ubuntu AMD64 OpenJDK)

浮動我?????????

引用我自己:這很丑陋,但是在這里有效。

嗯...看起來/聽起來像是我的伏都教解決方案。

引用自己:這很丑陋,但是在這里有效

...只要您繼續犧牲雞!!"它似乎行之有效",而沒有清楚地理解為什么編寫脆弱的,無法維護的代碼。我們應該不鼓勵新程序員使用這種編程方法……而不是向他們提供我們自己的伏都教編程"解決方案"以復制到他們的代碼中。

精彩。如果沒有可用的雞肉,則可以替代被詛咒的鴨子。這是我提到的"但可以在這里使用(Ubuntu AMD64 OpenJDK)":我不知道它是否可以在x86上運行(并且我不在乎)。對發生的情況的理解是微不足道的:1/10在任何二進制浮點數中都無法表示,無論精度如何。我不鼓勵任何人(無論有經驗的人)嘗試使0.1成為一個精確的浮點數..它只會起作用。我要說的是:這在指定的確切情況下有效。再多一點。

總結

以上是生活随笔為你收集整理的java中1和1.0_在Java中如何以0.1f增量在0.1f和1.0f之间进行迭代?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。