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

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

項目中經常會格式化數據,轉換數字的使用情況比較多,記錄一下數字轉換的方法! 如果需要轉換為繁體中文,將數組裡的漢字換成繁體中文即可。 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 }

 


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

更多相關文章
  • 以連接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... ...
一周排行
  • 背景 習慣使用markdown的人應該都知道Typora這個神器,它非常簡潔高效。雖然博客園的線上markdown編輯器也不錯,但畢竟是網頁版,每次寫東西需要登錄系統-進後臺-找到文章-編輯-保存草稿。。。非常難受。。。 但是使用Typora來寫的話,文章圖片又是個問題,本地寫完粘貼到網站上,圖片全 ...
  • 案例:修改預設線程個數 1.NameValueCollection System.Collections.Specialized.NameValueCollection collection = new System.Collections.Specialized.NameValueCollecti ...
  • // from https://stackoverflow.com/questions/35381238/how-to-use-custom-fonts-in-emgucv string text = "塗聚文(Geovin Du)"; // 下麵定義一個矩形區域 int rectWidth = t ...
  • 場景 ASP.NET中新建Web網站並部署到IIS上(詳細圖文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/107199747 前面講過將ASP.NET的項目部署到本機的IIS上。 但是如果將其部署到伺服器上Window ...
  • 在不同的區域中使用Convert.ToDouble可能會產生問題。 string str = "20.0"; double val = Convert.ToDouble(str); 比如在某些區域語言中得到的結果是200,如: Thread.CurrentThread.CurrentCulture ...
  • 1、前言 ​ 不知道你是否對.NET裡面的定時器產生過一些疑問,以下是武小棧個人的一些總結。 2、官方介紹 在.NET的框架之內定時器有四種,先看一下微軟官方對他們各自特點介紹: System.Timers.Timer,它將觸發事件,並定期在一個或多個事件接收器中執行代碼。 類旨在用作多線程環境中基 ...
  • 筆試考試系統需求分析 1. 引言 1.1編寫目的 項目需求分析目的是使用戶和軟體開發者雙方對項目開發目標有一個共同的理解,便於對軟體開發各個過程的控制與管理,通過對項目開發目標的描述,使開發人員能夠正確理解用戶需求,明確該系統應具有的功能。性能與界面要求。 需求分析作為項目開放的基礎和依據,其預期讀 ...
  • 使用Topshelf部署.net core windows服務 首先新建一個.net core的模板worker程式 過程 略 打開Program.cs namespace TopshelfDemo { public class Program { public static void Main(s ...
  • xaml裡面使用很簡單 xmlns:i="http://schemas.microsoft.com/xaml/behaviors" <i:Interaction.Behaviors> <i:MouseDragElementBehavior/> </i:Interaction.Behaviors> 後 ...
  • Application Insignhts是微軟開發的一套監控程式。他可以對線上的應用程式進行全方位的監控,比如監控每秒的請求數,失敗的請求,追蹤異常,對每個請求進行監控,從http的耗時,到SQL查詢的耗時,完完整整的被記錄下來。當對程式進行優化跟排錯時非常好使。它原來是visualstudio ...