Re: [閒聊] 中文數字轉阿拉伯數字

看板mud作者 (☺☻)時間2年前 (2021/11/18 17:06), 編輯推噓3(300)
留言3則, 3人參與, 2年前最新討論串4/4 (看更多)
因為在弄ansi繪圖軟體 所以這邊也提供一個嘗試用類似的處理方式來轉換文字 由左往右逐個char處理,並以萬、億、兆等來結算區塊 public ulong GetValue(string s) { ulong totalValue = 0; ulong blockValue = 0; ulong cellValue = 0; for (int i = 0; i < s.Length; i++) { char c = s[i]; var checkout = Checkout(c); //看是否結算區塊 if (checkout.Item1) { totalValue += (blockValue + cellValue) * checkout.Item2; blockValue = 0; cellValue = 0; continue; } var v = Conv(c); if (v.Item1) { cellValue = v.Item2; } else { blockValue += (cellValue == 0) ? 1 * v.Item2 : cellValue * v.Item2; cellValue = 0; } } totalValue += blockValue + cellValue; return totalValue; } //轉換判斷 public (bool, ulong) Conv(char c) => c switch { '零' => (true, 0), '一' => (true, 1), '二' => (true, 2), '兩' => (true, 2), '三' => (true, 3), '四' => (true, 4), '五' => (true, 5), '六' => (true, 6), '七' => (true, 7), '八' => (true, 8), '九' => (true, 9), '十' => (false, 10), '百' => (false, 100), '千' => (false, 1000), _ => (false, 1), }; //結算判斷 public (bool, ulong) Checkout(char c) => c switch { '萬' => (true, 10000), '億' => (true, 100000000), '兆' => (true, 1000000000000), '京' => (true, 10000000000000000), _ => (false, 1), }; //Test cases //string cNum = "一億兩千五百五十萬三千三百三十三"; // 125503333 pass //string cNum = "一億兩千零五萬三百零三"; // 120050303 pass //string cNum = "十五億零八萬一千二百零五"; //1500081205 pass //string cNum = "兩億"; // 200000000 pass //string cNum = "三億零二十六"; // 300000026 pass //string cNum = "三億十六"; // 300000016 pass //string cNum = "三億零十六"; // 300000016 pass //string cNum = "百萬"; // 1000000 pass //string cNum = "百八十"; // 180 pass //string cNum = "千萬"; // 10000000 pass (Elapsed = {00:00:00.0006638}) //string cNum = "五億五百萬五百"; // 505000500 pass (Elapsed = {00:00:00.0007338}) //string cNum = "一千八百四十四京六千七百四十四兆 零七百三十七億零九百五十五萬一千六百一十五"; //18,446,744,073,709,551,615 pass (Elapsed = {00:00:00.0008699}) 兩個字跟37個字基本上沒差太多 不確定有沒有小問題,不過大致上應該可以用 如果要判斷負的話就改一下單位,開頭多判斷個'負'就好 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.230.98.240 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/mud/M.1637226398.A.B9D.html

11/18 18:01, 2年前 , 1F
11/18 18:01, 1F

11/18 19:22, 2年前 , 2F
感謝分享
11/18 19:22, 2F

11/20 11:05, 2年前 , 3F
推!
11/20 11:05, 3F
文章代碼(AID): #1XbXUUkT (mud)
文章代碼(AID): #1XbXUUkT (mud)