static string[] ChineseNumbers = { "零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖" };
static string[] ChineseUnits = { "", "拾", "佰", "仟" };
static string[] ChineseGroupUnits = { "", "萬(wàn)", "億", "萬(wàn)億" };
public static void Main1()
{
// 示例金額
decimal amount = 123456089.12345m;
string chineseAmount = ConvertToChineseAmount(amount);
Console.WriteLine(chineseAmount);
}
static string ConvertToChineseAmount(decimal amount)
{
if (amount == 0)
{
return "零元整";
}
string result = "";
// 處理整數(shù)部分
long integerPart = (long)Math.Floor(Math.Abs(amount));
result += ConvertIntegerPartToChinese(integerPart);
// 處理小數(shù)部分
decimal decimalPart = Math.Abs(amount) - integerPart;
result += ConvertDecimalPartToChinese(decimalPart);
return result;
}
static string ConvertIntegerPartToChinese(long integerPart)
{
string result = "";
int groupIndex = 0;
while (integerPart > 0)
{
int group = (int)(integerPart % 10000);
if (group > 0)
{
result = ConvertGroupToChinese(group) + ChineseGroupUnits[groupIndex] + result;
}
integerPart /= 10000;
groupIndex++;
}
return result + "元";
}
static string ConvertGroupToChinese(int group)
{
string result = "";
int unitIndex = 0;
bool lastNonZero = false;
while (group > 0)
{
int digit = group % 10;
if (digit > 0)
{
result = ChineseNumbers[digit] + ChineseUnits[unitIndex] + result;
lastNonZero = true;
}
else
{
if (lastNonZero)
{
result = ChineseNumbers[digit] + result;
lastNonZero = false;
}
}
group /= 10;
unitIndex++;
}
return result;
}
static string ConvertDecimalPartToChinese(decimal decimalPart)
{
if (decimalPart == 0)
{
return "整";
}
string result = "";
for (int i = 1; i <= 5; i++)
{
int digit = (int)(decimalPart * 10);
if (digit > 0)
{
result += ChineseNumbers[digit] + GetDecimalUnit(i);
}
decimalPart = (decimalPart * 10) - digit;
}
return result;
}
static string GetDecimalUnit(int position)
{
switch (position)
{
case 1: return "角";
case 2: return "分";
case 3: return "厘";
case 4: return "毫";
case 5: return "絲";
default: return "";
}
}
輸出結(jié)果:
image.png