示例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:50 + (int)(Math.random() * 50)
返回50和99之間的整數。十進制格式的最大數量爲99.9。Math.random場景
實施例2: 34 + (int)(Math.random() * 21)
返回34和55之間的整數。 以十進制形式顯示的最大數量爲54.9個循環。
爲什麼示例2返回55而不是54?
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)
「
我認爲這是來自教科書或教程?第二個例子是錯誤的。它應該說「34至54」,就像你認爲它應該。
這是來自Y. Daniel Liang的一本名爲「Java編程入門」的書。物理版本和在線版本都有示例2作爲答案。我也發現一些大學也將此作爲解決問題的答案。 –
」十進制格式的最大數量是54.9循環「也不是真的正確。表達式'Math.random()* 21'的最大值是最大'double'的21倍,嚴格小於'1.0',四捨五入到最接近的'double'。我相當肯定,這個值嚴格低於'21',並且相當肯定那個值不是'20.999 ...'。 Java浮點是二進制的,而不是十進制的,所以重複9的討論基本上是脫離基礎的。 –