找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
尊貴會員無限使用任何功能儲值後自動升級用戶組你準備好成為出色的版主了嗎?
人妻上原亞衣ntrge 無碼名偵探柯3d惡靈古堡
i'm good園田みお異世紀機fsdss644ばにぃうroommate松本一香

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

快艇正妹豪乳吸睛

女子搧別人耳光的後果

[繁]迷宮飯12~15-

(4月新番)[簡]被稱為

[簡]單人房、日照一般

(4月新番)[繁]轉生貴
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 3288|回復: 10
打印上一主題下一主題

[分享]模擬實作Double.TryParse[複製鏈接]

Rank: 2Rank: 2

帖子
541
積分
212 點
潛水值
13707 米
跳轉到指定樓層
樓主
發表於 2015-1-5 08:13 PM|只看該作者|倒序瀏覽
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。
本帖最後由 rr09192084 於 2015-1-5 08:19 PM 編輯

在使用Double.Parse()轉換文字為雙精準數時,常因為沒有檢查文字格式而產生例外狀況Exception
所以有人轉而使用Double.TryParse(),這個方法有多個多載,正確的使用倒是可以解決這些問題。
而現在我們就要嘗試著自己撰寫這樣的方法,以下MyDouble這個類別我只實作了兩個TryParse()的多載。
各位也可以自由發揮,微軟雖然提供許多現成的類別、方法讓我們使用,我們除了可以直接拿來使用之外,
...
瀏覽完整內容,請先 註冊登入會員
分享分享0收藏收藏0支持支持0
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
317
積分
1000 點
潛水值
16095 米
頭香
發表於 2015-1-6 12:04 PM|只看該作者
你如果要練習,我沒意見,因為只是練習程式,在練習概念與寫法。

你如果要把你這程式用在實務上,我不推薦,因為你的成本消耗非常大,
用你的TryParse跟單純用try-catch內包Parse是一樣的,甚至用你的消耗更大。

建議你看一下微軟內的TryParse怎麼做,絕對不是用try-catch包Parse。

微軟內的TryParse
  1.         [System.Security.SecuritySafeCritical]  // auto-generated
  2.         internal unsafe static Boolean TryParseDecimal(String value, NumberStyles options, NumberFormatInfo numfmt, out Decimal result) {

  3.             Byte * numberBufferBytes = stackalloc Byte[NumberBuffer.NumberBufferBytes];
  4.             NumberBuffer number = new NumberBuffer(numberBufferBytes);
  5.             result = 0;
  6.                         
  7.             if (!TryStringToNumber(value, options, ref number, numfmt, true)) {
  8.                 return false;
  9.             }

  10.             if (!NumberBufferToDecimal(number.PackForNative(), ref result)) {
  11.                 return false;
  12.             }
  13.             return true;
  14.         }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。

使用道具檢舉

Rank: 2Rank: 2

帖子
541
積分
212 點
潛水值
13707 米
3
發表於 2015-1-6 02:18 PM|只看該作者
感謝sam30525sam的指正,不知道您這篇文獻源自於哪裡?可不可以貼出來讓小弟參考一下,
我只是很單純的參考了MSDN這篇
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

的做法。
您貼這個程式碼的確看不到try catch的區段,但以我理解TryStringToNumber這個方法,裡面會是怎樣的結構才可以捕捉錯誤呢?
...
瀏覽完整內容,請先 註冊登入會員
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
317
積分
1000 點
潛水值
16095 米
4
發表於 2015-1-6 03:27 PM|只看該作者
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。
本帖最後由 sam30525sam 於 2015-1-6 03:30 PM 編輯
rr09192084 發表於 2015-1-6 02:18 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

感謝sam30525sam的指正,不知道您這篇文獻源自於哪裡?可不可以貼出來讓小弟參考一下,
我只是很單純的參考 ...
...
瀏覽完整內容,請先 註冊登入會員
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。

使用道具檢舉

Rank: 2Rank: 2

帖子
541
積分
212 點
潛水值
13707 米
5
發表於 2015-1-6 03:57 PM|只看該作者
你什麼時候產生了TryParse會捕捉錯誤的錯覺.....
我實在無法理解,不捕捉錯誤,如何能不產生例外狀況?
TryParse如果不是有這種機制,那是如何做到的...我只想理解這一點
它不會擲回例外狀況,就判定它不是用類似try catch的機制?
try catch機制本來就可以不擲回例外(隱藏起來而已)。
另外,我要嚴重質疑微軟的TryParse,它轉換失敗就丟回的 0 ???
輸入不正確的數值或是空字串跟零是相等的嗎?
...
瀏覽完整內容,請先 註冊登入會員





如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
317
積分
1000 點
潛水值
16095 米
6
發表於 2015-1-6 04:21 PM|只看該作者
rr09192084 發表於 2015-1-6 03:57 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

你什麼時候產生了TryParse會捕捉錯誤的錯覺.....
我實在無法理解,不捕捉錯誤,如何能不產生例外狀況?
Try ...

...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 2Rank: 2

帖子
541
積分
212 點
潛水值
13707 米
7
發表於 2015-1-6 04:37 PM|只看該作者
我也覺得鬼打牆了,我真的是從實務面來考量,微軟建議就是最佳選擇?
我這樣說吧,老闆叫我寫個計算複利的程式,我用了TryParse,我自己RUN起來順的不得了....
我寫好交給公司會計小姐使用,會計小姐不小心打錯了本金的格式,程式它沒告訴是怎麼回事,
直接把到期的本利合說成是零。
再過幾天,老闆請我走路。

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
317
積分
1000 點
潛水值
16095 米
8
發表於 2015-1-6 05:02 PM|只看該作者
rr09192084 發表於 2015-1-6 04:37 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

我也覺得鬼打牆了,我真的是從實務面來考量,微軟建議就是最佳選擇?
我這樣說吧,老闆叫我寫個計算複利的 ...

...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 2Rank: 2

帖子
541
積分
212 點
潛水值
13707 米
9
發表於 2015-1-6 05:06 PM|只看該作者
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。
感謝您的指教,我會再多多學習的

使用道具檢舉

Rank: 2Rank: 2

帖子
541
積分
212 點
潛水值
13707 米
10
發表於 2015-1-6 11:40 PM|只看該作者
若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php
我看了
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

幾乎所有的數值型態int32 int64 double等等都是用這個number.cs轉換成十進位數,再轉成相應的如int16 int32 double等數值型態,原始程式裡的確沒有throw關鍵字來產生例外,你所說的都沒有錯。
但是我要討論的不是效能的問題,是正確性的問題,而且我的目是要讓使用者知道錯在哪裡?而寫出可以提示發生錯誤的方法,照你之前帖子裡所說的用try catch會比直接用tryparse多10倍的延遲,我想我們都誤會了彼此的用意,如果照你的邏輯,用tryparse可能會是這樣
  1. double money = 0;
  2. if (!Double.TryParse(txtCapi.Text, out money))
  3. {
  4.      MessageBox.Show("輸入本金的格式有誤!!!");
  5.      return;
  6. }
複製代碼
他的關鍵就在傳回的布林值,用以判斷是否轉換成功?不成功程式就要必要的處理已達到防呆的目的,這樣就不用try catch來包了。...
瀏覽完整內容,請先 註冊登入會員





使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
317
積分
1000 點
潛水值
16095 米
11
發表於 2015-1-7 10:48 AM|只看該作者
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。
rr09192084 發表於 2015-1-6 11:40 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

我看了
http://referencesource.microsoft.com/#mscorlib/system/number.cs
幾乎所有的數值型態int32 int64 ...

不是誤會彼此的用意,
...
瀏覽完整內容,請先 註冊登入會員
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部