查看單個文章
舊 2009-05-20, 03:50 PM   #10 (permalink)
cwvdavid
長老會員
 
cwvdavid 的頭像
榮譽勳章
UID - 476
在線等級: 級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時
註冊日期: 2002-12-06
住址: 天與地的夾縫
文章: 3106
精華: 0
現金: 5256 金幣
資產: 2034465 金幣
預設

之所以沒有出現20位數...
是因為你在網路找上的範例有問題...


Rnd 本身所取得的數為 0 ~ 1之間的數值...
例如:
0.1098735
0.2729468
0.6736467

而當你把Rnd所取得的值, 乘上100000000 (1億)時,
則取得的亂數, 會是
10987353.3215734
27294681.6312982
67364675.1947425

利用Round 取整數後, 得到的值是
10987353
27294681
67364675

再利用HEX把上面的數值轉成 16進位之後,
就有可能因為數值太小, 而會發生少一位數的情況

例如:
15 對應16進位是 F (2位數 vs 1位數)
16 對應16進位是 10 (2位數 vs 2位數)
255 對應16進位是 FF (3位數 vs 2位數)
256 對應16進位是 100 (3位數 vs 3位數)

而實際取值所得到的結果...
10987353 對應16進位是 A7A759 (8位數 vs 6位數)
27294681 對應16進位是 1A07BD9 (8位數 vs 7位數)
67364675 對應16進位是 403E743 (8位數 vs 7位數)

以上例子 加起來剛好20位數,
但實際在跑亂數時,你將會遇到3個都是7位數,或3個都是6位數,
造成你跑完的結果,介於18個~21個英文數字(不可能一直都是20個英文數字的)
=============================
更慘的是,利用HEX來取英文數字, 只能取得A,B,C,D,E,F 5種英文字而已


真的是看了就不知道要怎麼改呀...............
上網找別的例子還比較快...


http://zhidao.baidu.com/question/92992772.html
這是別人寫的, 參考看看吧...
__________________
姜太公釣魚~ 願者上鉤
cwvdavid 目前離線  
送花文章: 4036, 收花文章: 2466 篇, 收花: 10141 次
回覆時引用此帖
有 3 位會員向 cwvdavid 送花:
kppne0931 (2009-05-20),Living (2009-05-21),sob790717b (2009-05-23)
感謝您發表一篇好文章