2012-07-20 69 views
1

這裏是背景信息的簡要位:比較數字時,這些數字串

雖然設計規則引擎所需輸入我碰到有問題絆了形式的各個方面進行比較,以檢查是否一個數比另一個號碼大,運營商>和<對嗎?錯誤的是,我必須比較這兩種類型的字符串,它們必須是字符串,而不是可以改變的東西。

所以希望看到引擎會在哪裏出現故障,所以我會知道從哪裏開始我告訴它比較「100」到「10,000」,你可以想象我的驚喜,當它正確地計算出10k更大時,然後我意識到DUH它只是比較字符串長度,所以我比較1001到1000,再次得到它正確,1001更大。

但是我堅持認爲這不應該起作用,所以我一直堅持用各種各樣的場景敲擊引擎,以確保它看起來失敗。在一位同事指出系統能夠比較1001和1000作爲文件名並正確排序後,最新的想法是它比較了某種類型的aschii字符值,測試繼續進行。這個WOULD失敗了,我不能接受它能夠正確地計算出哪兩個是字符串時哪個數字更大。

所以我的下一個想法是,它排列每個字符串的第一個字符,並通過字符串的每個部分比較值。當我測試11,111到9,999時,我終於成功了,它認爲9,999更大。完美的是,我已經足夠高興了,它比較了1比9和9勝,每次都簡單修正,在較短的字符串前添加0。

通過引擎運行這個新理論,並再次愉快地計算哪個更大。

但是,我仍然不相信,這種比較肯定還有其他的缺陷,但我缺少比較來測試證明我的理論。所以,我對你過花的問題是你認爲這可能會失敗的情景?

你以前試過這個嗎?比較字符串時的數字和你遇到的陷阱是什麼?我有沒有覆蓋他們或我忽略了一些重大陷阱?

我不相信這種方法是傻瓜證明(不過請注意,我沒有測試,如100D爲10000串,因爲沒有驗證,以確信這一點)

提前感謝!

注:我做了一些Google搜索和搜索,我不認爲它在這裏被任何問題覆蓋,是的一些是相似的,但他們擔心不想在字符串中的數字,不想要一串數字,所以我認爲這不同,足以發佈。

注2:我的具體問題是在哪裏將數字比較使用數字而不是整數

+1

與「int」比較相比,它們會在哪裏失敗?那麼,如果它編程正確,他們不會。 – 2012-07-20 13:35:50

+0

我認爲你已經過分理性化了這一點,當你應該解析爲int,double等並比較THAT。 – Polyfun 2012-07-20 13:39:32

+0

再一次,意識到做到這一點的正確方法,我甚至以正確的方式做到了,我只是好奇使用字符串的程度,純粹的好奇心 – RhysW 2012-07-20 13:41:34

回答

4

的字符串時,要比較字符串的數字失敗,它會是最好把它們變成數第一,例如使用int.Parse。這更簡單得多,更不用說容易了,讓其他人弄清楚將字符串解析爲數字的所有文化敏感的複雜性,然後再使用簡單的數字比較。

如果字符串不總是數字,請使用int.TryParse並進行適當的處​​理。

+0

OFc我意識到這一點:P但被測試的字段不會總是數字,sometiems它會是「男性」soemtimes「100」,所以我不能使用INT解析,因爲試圖解析男性作爲一個整數將是荒謬的:P – RhysW 2012-07-20 13:36:52

+0

然後考慮'int.TryParse'。我編輯了我的答案。 – 2012-07-20 13:37:51

+1

@RhysW:男與女之間,誰更大?爲什麼?在編寫引擎之前正確設計您的應用程序/數據。保存數字和枚舉字符串是不公平的,如果你需要解析和比較它們... – Marco 2012-07-20 13:39:40

2

讓我看看,如果我理解你的問題:

你基本上是問這個是否成立:

給定的正整數n1和n2及其相應詞彙表示L(N1)和L(N2) , n1 < n2當且僅當L(n1)< L(n2)?

如果這是比是的問題,那麼這是正確的,你可以從詞典排序的定義中推導出它。

參見:http://www.dartmouth.edu/~matc/DiscreteMath/III.5.pdf 定義定義III.5.2。

但是,您沒有提到所有整數都是正數,但是對於負整數恰好相反。

令我擔憂的是存在非字符串的可能性並不代表整數。你能以某種方式避免它嗎?如果不是,這是非常危險的方式,並可能產生非常意想不到的行爲。

+0

謝謝,是的,有驗證只允許這些地方的數字,並且在我不能確定有正則表達式字符串尋找模式和一些刪除無用的位來保持數字,我只是使用整數,但有時返回的值是一個字符串,必須是一個字符串,所以它有點煩人 – RhysW 2012-07-20 15:35:39

+0

這很有趣。聽起來像是一種代碼味道。但不能確定。你能否詳細介紹一下用例? 有時可能存在阻止這種轉換的外部約束(例如,從性能角度來看)。我不是說這是事實,但你不應該這麼快判斷。 – Vitaliy 2012-07-21 06:30:56