2017-07-02 58 views
1

示例1:50 + (int)(Math.random() * 50)返回50和99之間的整數。十進制格式的最大數量爲99.9。Math.random場景

實施例2: 34 + (int)(Math.random() * 21)返回34和55之間的整數。 以十進制形式顯示的最大數量爲54.9個循環。

爲什麼示例2返回55而不是54?

+1

」十進制格式的最大數量是54.9循環「也不是真的正確。表達式'Math.random()* 21'的最大值是最大'double'的21倍,嚴格小於'1.0',四捨五入到最接近的'double'。我相當肯定,這個值嚴格低於'21',並且相當肯定那個值不是'20.999 ...'。 Java浮點是二進制的,而不是十進制的,所以重複9的討論基本上是脫離基礎的。 –

回答

2

Math.random()[0.0, 1.0)的範圍內返回一個小數,

所以你的假設在每個實施例

對於第一個例子,50 + 49.9 = 99.9

對於第二個例子中,34是正確的+ 20.9 = 54.9

我不確定你在哪裏得到55例二,因爲當小數點被轉換爲一個int時,小數點將失去它的精度,有效地將其舍入到cr eate的99例1和54的最大例如2

編輯

這本書是錯誤的,如果你想的範圍是34到55,代碼必須是

34 + (int)(Math.random() * 22) 
1

我認爲這是來自教科書或教程?第二個例子是錯誤的。它應該說「34至54」,就像你認爲它應該。

+0

這是來自Y. Daniel Liang的一本名爲「Java編程入門」的書。物理版本和在線版本都有示例2作爲答案。我也發現一些大學也將此作爲解決問題的答案。 –