數字轉人民幣大寫演算法一則

2021-06-15 10:40:14 字數 2107 閱讀 3273

閒來無事,一時心血來潮,寫了個數字轉人民幣大寫的例子。其中主要的難點是「0」在不同位置,處理的方式有所不同。

這裡考慮的是整數字為最多12位,小數字2位的通用數字。也就是最小值0.00,最大值為999999999999.99。

從左往右看,首先數字在整數部第4位,第8位與第12位為「0」時,不應轉化為大寫「零」。而在小數部的第2位也不應為零。

再者,若是某處數字為「0」,那麼如果其前一位也是「0」的話,則同樣不應轉化為「零」,否則會出現「零零」這樣的結果。

但是這有例外,比如100100.00這樣的數字,第三位是「0」,第二位也是「0」,而按照習慣,是應該轉成「壹拾萬零壹佰元整」的。

所以要考慮將12位整數分為三個部分。若不足12位的話,前面加「0」補足。

當某一部分的某一數字不滿足前一位不為「0」這一條件時,先要從當前部分檢視是否之前有過非「0」的數字,若有則不需要加「零」。

如要當前部分還是不滿足條件的話,則要繼續向前查詢,在前一部分尋找是否有非「0」的數字。找到的話則加「零」。

小數部分有個地方需要注意:當整數部分為0,小數部分第一位也是「0」時,不要將其轉為「零」。

using system;

using system.collections.generic;

using system.globalization;

using system.text;

using system.text.regularexpressions;

using system.threading;

namespace demo

}private static void test()

i = 0;

while (i++ < 2)

console.writeline(convertormb(convert.todecimal(sb.tostring(), cultureinfo.invariantculture)));

}private static string convertormb(decimal num)

string parts = data.split('.');

string intpart = parts[0];

string decpart = parts[1];

string intresult = parseintpart(intpart);

bool iszero = string.isnullorempty(intresult);

string decresult = parsedecpart(decpart, iszero);

string result = string.empty;

if (string.isnullorempty(intresult))

else

}else

else

}return result;

}private static bool validatedata(string data)

\.\d$");

return r.ismatch(data);

}private static string parseintpart(string intpart)

;arr.copyto(temp, 12 - arr.length);

stringbuilder sb = new stringbuilder();

for (int i = 0; i < 3; i++)

}else}}

else

}if (!flag)}}

}}}}

}}

}if (s.length > 0)}}

return sb.tostring();

}private static string parsedecpart(string decpart, bool iszero)

stringbuilder sb = new stringbuilder();

if (c1 != '0')

else

}if (c2 != '0')

return sb.tostring();}}

}

原文同步發布於我的

個人部落格

人民幣轉大寫

function changermb const strrmb string string vartxt,strhighlevel string i,n,m,ilen,ipos integer n記錄整數部分長度,m記錄分數部分長度 strarray,strlevel array of string...

PHP 數字金額轉人民幣大寫

數字金額轉換成中文大寫金額的函式 string int num 要轉換的小寫數字或小寫字串 return 大寫字母 小數字為兩位 function num to rmb num i 0 c while 1 else 每次將最後一位數字轉化為中文 p1 substr c1,3 n,3 p2 subst...

人民幣數字金額轉大寫金額

public class t if money.substring index,money.length length 3 money money.replaceall d 去除 int length money.length 貨幣大寫形式 string bigletter 貨幣單位 string ...