![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 MIS2000 Lab ![]()
![]() ![]() |
希望各位前輩給我一些意見,謝謝 Response.Write(IsNumeric("不是一個數字")) 居然輸出 True
本篇文章發表於2013-07-19 08:54
== 簽名檔 ==
無垢清淨光 慧日破諸闇 能伏災風火 普明照世間 ASP.NET專題實務 教學網站與範例 https://www.dotblogs.com.tw/mis2000lab/ ASP.NET 專題實務(博碩出版),共有上下兩集。 線上教學均提供 第一堂課 免費試聽 ASP.NET MVC5與 .NET Core線上教學影片 https://www.dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab ASP.NET Web Form 線上教學影片 https://www.dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015 |
1樓
作者回應
MIS2000 Lab ![]() |
這是VB的 IsNumeric函式,微軟網站也有幾個範例
http://msdn.microsoft.com/zh-tw/library/6cd3f6w1(v=vs.80).aspx 另外,相關的測試如下 Response.Write(IsNumeric("不是個數字")) 輸出 False Response.Write(IsNumeric("不是一個數字吧")) 輸出 False 實在不能理解啊 ......................................................................................................... Response.Write(IsNumeric("123")) 輸出 True Response.Write(IsNumeric("1X3")) 輸出 False
本篇文章回覆於2013-07-19 08:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓
最有價值解答
Allen ![]() ![]() |
我猜可能是特例吧
![]() IsNumeric()內部是叫用double.TryParse(), 從上圖可以看到TryParse遇到這個中文字串是傳回true, 而值是NaN(not a number) 其他的字串就全傳回false了
本篇文章回覆於2013-07-19 12:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓 |
MS 暗藏已久的功能,被測出來了
(我也覺得是特例)
本篇文章回覆於2013-07-19 12:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
4樓
不錯的參考
Koshimoto ![]() |
我測試的結果是它會把數字運算會產生的結果都判斷為數字
例如:"正無窮大"、"負無窮大"、"不是一個數字".... 正數除以0 = "正無窮大" 負數除以0 = "負無窮大" "不是一個數字"的結果我不記得要怎麼用出來了 但我以前有試出來過
本篇文章回覆於2013-07-19 12:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
5樓
不錯的參考
KKBruce ![]() ![]() |
結合 2f 與 4f
我看了一下 Double.TryParse 在解析時是會帶「文化」特性, Double.NaN 在中文翻譯剛好是 "不是一個數字" 可能演算法有點問題,造成了 4F 所說的:把「運算結果」的「中文」回傳為 True。 官方說明中: 如果 Expression 為可以成功轉換成數字的 Char 或 String,它也會傳回 True。 所以我想是反著看: "不是一個數字" 等於 Double.NoN, NoN 在 VB 裡是用 -1 代表,-1 是個數字,所以回傳 True。 其他"正無窮大""負無窮大" 也是一樣等於 Double.NegativeInfinity / Double.PositiveInfinity 在 VB 裡都是用 -1。 以上是我的推論。
本篇文章回覆於2013-07-19 13:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
6樓
不錯的參考
小羊窒息 ![]() ![]() |
4樓講出了問題點...
我們的微軟...在數字判斷時... 額外做了3種檢查... 1. 負無限大的檢查 2. 正無限大的檢查 3. 不是一個數字的檢查 (註:以上3種, 都是做 "文字" 的比對) 更重要的是, 這3者的文字, 依國情不同, 會有不同結果... (這個要靠 .Net Reflector 來看裡面的運作, 才會發現...) NumberFormatInfo這個class, 在new(...)的時候, 最底下有1個 Culture 的檢查... 也就是說, 在正體中文的平台, 會自動把英文替換成中文... negativeInfinitySymbol 設定為【正無窮大】(注意:是無窮大,不是無限大) positiveInfinitySymbol 設定為【負無窮大】 nanSymbol 設定為【不是一個整數】 ======================================= 我剛才實測的結果: asp.net的頁面,加上 UICulture="en" Culture="en-US" <%@ Page UICulture="en" Culture="en-US" .... > 然後再去測試。。。 Response.Write(IsNumeric("不是一個數字")) '在en的語系,這是false Response.Write(IsNumeric("NaN")) '在en的語系,這是true 也就是說,這是3種文字,是特例資料... 它是numeric, 但它並不是可以被拿來使用的數字 同時,它也隨著平台的不同,而使用不同的文字來做判斷...
本篇文章回覆於2013-07-19 14:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
7樓
作者回應
MIS2000 Lab ![]() |
各位前輩實在太神了,
功力高深、不可限量 謝謝各位這麼寶貴的建議,十分受用。 我會請讀者來看這篇文章(因為我也不會回答,只能請網路上的高人出手幫助)
本篇文章回覆於2013-07-19 14:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
8樓 |
竟然內建了翻譯的功能 ...
強大
本篇文章回覆於2013-07-19 16:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
9樓
作者回應
MIS2000 Lab ![]() |
補充一下,另一位網友的文章
Double.Parse、Double.TryParse、IsNumeric 使用注意事項 http://www.dotblogs.com.tw/larrynung/archive/2013/07/19/111546.aspx
本篇文章回覆於2013-07-19 18:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
10樓 |
回9樓,那鍋“英英”就是我...
謝謝各樓的大大,想不到這個奇怪的問題牽扯範圍這麼廣... 【負無限大】我在昨天也遇到了,我暫時用IF把這些吊詭的字濾掉。 惱人的鬼打牆問題就這麼豁然開朗,再次謝謝各位大大的協助。
本篇文章回覆於2013-07-19 20:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |