阿拉伯數字轉換為中文數字/中文數字轉換為阿拉伯數字

来源:https://www.cnblogs.com/yellow3gold/archive/2019/08/12/11338374.html
-Advertisement-
Play Games

項目中經常會格式化數據,轉換數字的使用情況比較多,記錄一下數字轉換的方法! 如果需要轉換為繁體中文,將數組裡的漢字換成繁體中文即可。 1.阿拉伯數字轉換為中文數字 2.中文數字轉換為阿拉伯數字 ...


項目中經常會格式化數據,轉換數字的使用情況比較多,記錄一下數字轉換的方法!

如果需要轉換為繁體中文,將數組裡的漢字換成繁體中文即可。

1.阿拉伯數字轉換為中文數字

 1 /// <summary>
 2 /// 阿拉伯數字轉換成中文數字
 3 /// </summary>
 4 /// <param name="x"></param>
 5 /// <returns></returns>
 6 public string NumToChinese(string x)
 7 {
 8     string[] pArrayNum = { "", "", "", "", "", "", "", "", "", "" };
 9     //為數字位數建立一個位數組  
10     string[] pArrayDigit = { "", "", "", "" };
11     //為數字單位建立一個單位數組  
12     string[] pArrayUnits = { "", "", "", "萬億" };
13     var pStrReturnValue = ""; //返回值  
14     var finger = 0; //字元位置指針  
15     var pIntM = x.Length % 4; //取模  
16     int pIntK;
17     if (pIntM > 0)
18         pIntK = x.Length / 4 + 1;
19     else
20         pIntK = x.Length / 4;
21     //外層迴圈,四位一組,每組最後加上單位: ",萬億,",",億,",",萬,"  
22     for (var i = pIntK; i > 0; i--)
23     {
24         var pIntL = 4;
25         if (i == pIntK && pIntM != 0)
26             pIntL = pIntM;
27         //得到一組四位數  
28         var four = x.Substring(finger, pIntL);
29         var P_int_l = four.Length;
30         //內層迴圈在該組中的每一位數上迴圈  
31         for (int j = 0; j < P_int_l; j++)
32         {
33             //處理組中的每一位數加上所在的位  
34             int n = Convert.ToInt32(four.Substring(j, 1));
35             if (n == 0)
36             {
37                 if (j < P_int_l - 1 && Convert.ToInt32(four.Substring(j + 1, 1)) > 0 && !pStrReturnValue.EndsWith(pArrayNum[n]))
38                     pStrReturnValue += pArrayNum[n];
39             }
40             else
41             {
42                 if (!(n == 1 && (pStrReturnValue.EndsWith(pArrayNum[0]) | pStrReturnValue.Length == 0) && j == P_int_l - 2))
43                     pStrReturnValue += pArrayNum[n];
44                 pStrReturnValue += pArrayDigit[P_int_l - j - 1];
45             }
46         }
47         finger += pIntL;
48         //每組最後加上一個單位:",萬,",",億," 等  
49         if (i < pIntK) //如果不是最高位的一組  
50         {
51             if (Convert.ToInt32(four) != 0)
52                 //如果所有4位不全是0則加上單位",萬,",",億,"等  
53                 pStrReturnValue += pArrayUnits[i - 1];
54         }
55         else
56         {
57             //處理最高位的一組,最後必須加上單位  
58             pStrReturnValue += pArrayUnits[i - 1];
59         }
60     }
61     return pStrReturnValue;
62 }

 

2.中文數字轉換為阿拉伯數字

 

 1 /// <summary>
 2 /// 轉換數字
 3 /// </summary>
 4 protected static long CharToNumber(char c)
 5 {
 6     switch (c)
 7     {
 8         case '': return 1;
 9         case '': return 2;
10         case '': return 3;
11         case '': return 4;
12         case '': return 5;
13         case '': return 6;
14         case '': return 7;
15         case '': return 8;
16         case '': return 9;
17         case '': return 0;
18         default: return -1;
19     }
20 }
21 
22 /// <summary>
23 /// 轉換單位
24 /// </summary>
25 protected static long CharToUnit(char c)
26 {
27     switch (c)
28     {
29         case '': return 10;
30         case '': return 100;
31         case '': return 1000;
32         case '': return 10000;
33         case '': return 100000000;
34         default: return 1;
35     }
36 }
37 /// <summary>
38 /// 將中文數字轉換阿拉伯數字
39 /// </summary>
40 /// <param name="cnum">漢字數字</param>
41 /// <returns>長整型阿拉伯數字</returns>
42 public static long ParseCnToInt(string cnum)
43 {
44     cnum = Regex.Replace(cnum, "\\s+", "");
45     long firstUnit = 1;//一級單位                
46     long secondUnit = 1;//二級單位 
47     long result = 0;//結果
48     for (var i = cnum.Length - 1; i > -1; --i)//從低到高位依次處理
49     {
50         var tmpUnit = CharToUnit(cnum[i]);//臨時單位變數
51         if (tmpUnit > firstUnit)//判斷此位是數字還是單位
52         {
53             firstUnit = tmpUnit;//是的話就賦值,以備下次迴圈使用
54             secondUnit = 1;
55             if (i == 0)//處理如果是"十","十一"這樣的開頭的
56             {
57                 result += firstUnit * secondUnit;
58             }
59             continue;//結束本次迴圈
60         }
61         if (tmpUnit > secondUnit)
62         {
63             secondUnit = tmpUnit;
64             continue;
65         }
66         result += firstUnit * secondUnit * CharToNumber(cnum[i]);//如果是數字,則和單位想乘然後存到結果里
67     }
68     return result;
69 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 以連接mysql資料庫為例 一 安裝組件 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.Relational Microsoft.EntityFrameworkCore.Tools MySqlConnector Pomelo. ...
  • 1.業務場景:用戶登錄,收到消息通知,審批業務,根據配置的流程繼續流轉,最終審核發送回給申請人(終審同意結束,終審不同意申請人可以繼續修改提交)。 2.思路過程: 3..資料庫設計: 4.代碼過程: ...
  • 上接(abp(net core)+easyui+efcore實現倉儲管理系統——使用 WEBAPI實現CURD (十二)),在這一篇文章中我們創建視圖模型、列表視圖、添加菜單。 ...
  • 1.前言 ASP.NET Core應用程式可以配置和啟動主機(Host)。主機負責應用程式啟動和生命周期管理。通用主機用於無法處理HTTP請求的應用程式。通用主機的用途是將HTTP管道從Web主機API中分離出來,從而啟用更多的主機方案。 基於通用主機的消息、後臺任務和其他非HTTP工作負載可從橫切 ...
  • .NET Core 數據結構與演算法 1 1 本節內容為順序表 簡介 線性表是簡單、基本、常用的數據結構。線性表是線性結構的抽象 (Abstract),線性結構的特點是結構中的數據元素之間存在一對一的線性關係。這 種一對一的關係指的是數據元素之間的位置關係,即: 除第一個位置的數據元素外,其它數據元素 ...
  • RBAC許可權框架(Role-Based Access Control)基於角色的許可權訪問控制的框架,通過用戶-角色-許可權的關聯,非常方便的進行許可權管理,在這裡不再說明什麼是RBAC,請自行百度. 謝謝大家的捧場,如文章中有錯誤或者,請聯繫我或者給我發郵件[email protected],修正後 ...
  • 訪問修飾符 訪問修飾符 C# 中常用的有 private、public、protected、internal 4個訪問修飾符。 private:私有訪問是允許的最低訪問級別,私有成員只有在聲明它們的類和結構中才可以訪問。 public:公共訪問是允許的最高訪問級別,對訪問公共成員沒有限制。 prot ...
  • using System; namespace Application { class JianDanGongChang { static void Main(string[] args) { Factory factory=new Factory(); DianNao diannao=factor... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...