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

来源: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
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...