Feed on
Posts
Comments

 野蠻女友逼男友買車

女友太任性啦,任性到了極致,不過太有笑點了

 心機很重的小孩! 超好笑

我記得我小姪子也做過類似的事情,哈…原來真的有這麼一回事

 民國百年大計之資料轉換陷阱

大家都知道很多大主機(COBOL)的日期表示的年是用民國年,而且是只有兩位數,新舊平台之間的資料需要做轉換,例如 98 → 2009。
最近在修改一個程式bug發現一件非常有趣的一件事,關於民國百年的資料轉換,舉個例子,從舊平台資料MQ回到新平台日期為 00980911,這樣的資料一路PASS到前端的Java Script後如何轉換為西元年呢?
程式原本這樣寫
// PAY_DATE_POL =" 00980911"
var  year = (eval(PAY_DATE_POL.substring(0, 4)) + 1911).toString();
這樣寫有什麼問題嗎? 好像沒問題,但事實上問題可大的呢,以下做幾項測試
x = eval("0098")+1911;    // x 結果等於 2009,正確
x = eval("0099")+1911;    // x 結果等於 2010,正確
x = eval("0100")+1911;    // x 結果等於 1975錯誤
x = eval("0101")+1911;    // x 結果等於 1976錯誤
.
.
.
x = eval("0107")+1911;    // x 結果等於 1982錯誤
x = eval("0108")+1911;    // x 結果等於 2019,正確
x = eval("0109")+1911;    // x 結果等於 2020,正確
這段程式若沒改會一路從民國100年錯到107年,以上結果可以自行上網測試看看 http://www.w3schools.com/js/tryit.asp?filename=tryjs_variables
20090925
原因為何?
詳細再追下去,錯的地方在 eval("0100") 計算出來結果居然是 64,以此類推
eval("0100") =  64
eval("0101") =  65
eval("0102") =  66
eval("0103") =  67
.
.
.
顯然Java Script 程式語言跟你有溝通有障礙,突然不懂程式在搞什麼鬼了><
但是突然間在 eval("0108") 計算結果又變回了 108,呵...夠好玩了吧

現在焦點應該要放在什麼情況下 "0100" 會變成 64 ?

公佈答案,主要原因是程式把 "0100" 解讀成八進位的數值了,而不是我們熟悉的十進位
0 x 8^3 + 1 x 8^2 + 0 x 8^1 + 0 x 8^0 = 64

那麼 "0108" 又變回 108 的原因就是八進位根本不可能有8嘛,所以程式又自動認定成十進位了,原來都是Java Script一廂情願的認知結果

所以其實Java Script語言,資料型態這部分並不是非常嚴謹的,相較於其他的正規語言,如: C/C++、java 來說,在寫Java Script時很容易就會掉進陷阱而不自知。

所以建議一,可以的話就在舊主台就把資料轉換為四位的西元年。
或者建議二,在java中用就把資料轉換為西元年,再丟到前端的jsp。
再不然建議三,在Java Script 一定要用parseInt()函數,強制指定認定十進位
x  = parseInt("0100",10);   // parseInt(string, radix)
這樣 x 的結果就會是正確的 100 囉^^

 印尼媽媽產巨嬰 創全國最重新生兒紀錄

圖片超可愛的啦^^

法新社 更新日期:2009/09/24 01:35 盧映孜

(法新社雅加達23日電) 印尼一位婦科醫師今天表示,一名婦女產下8.7公斤重的男嬰,創下全國最重新生嬰兒的紀錄。

北蘇門答臘省(North Sumatra)一家公立醫院的婦科醫生告訴法新社,這名婦女21日剖腹產下一男嬰,尚未命名,身長達62公分。

這名婦科醫師說:「這名巨嬰讓生產手術很辛苦,尤其將他從母親子宮中取出的過程,他的腿太大了。」

該婦科醫師表示,雖然男嬰剛開始必須供給氧氣,以克服呼吸問題,但他健康狀況無礙。(譯者:中央社盧映孜)

 呼拉圈要這樣玩

2009/09/12 信義區, 街頭藝人, 2009年高雄世運開幕表演佳賓

Older Posts »