最简单的事情最麻烦, 希望已经没有BUG了.
费了九牛二虎之力才搞定的大写数字转换的代码.using System;
费了九牛二虎之力才搞定的大写数字转换的代码.
using System.Collections;
费了九牛二虎之力才搞定的大写数字转换的代码.
using System.IO;
费了九牛二虎之力才搞定的大写数字转换的代码.
using System.Text;
费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.
namespace HXBTools.Util
{

费了九牛二虎之力才搞定的大写数字转换的代码.    
/// 用于将一个数值型转化为汉语的读法.
费了九牛二虎之力才搞定的大写数字转换的代码.    
/// </summary>
费了九牛二虎之力才搞定的大写数字转换的代码.    public class NumberToChn
{
费了九牛二虎之力才搞定的大写数字转换的代码.        
public NumberToChn()
{
费了九牛二虎之力才搞定的大写数字转换的代码.            
//
费了九牛二虎之力才搞定的大写数字转换的代码.            
// TODO: 在此处添加构造函数逻辑
费了九牛二虎之力才搞定的大写数字转换的代码.            
//
费了九牛二虎之力才搞定的大写数字转换的代码.
        }
费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.        
public static string GetChn(decimal dc, bool bUpper)
{
费了九牛二虎之力才搞定的大写数字转换的代码.            
return GetChn(dc.ToString(), bUpper);
费了九牛二虎之力才搞定的大写数字转换的代码.        }

费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.        
public static string GetChn(int i, bool bUpper)
{
费了九牛二虎之力才搞定的大写数字转换的代码.            
return GetChn(i.ToString(), bUpper);
费了九牛二虎之力才搞定的大写数字转换的代码.        }

费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.        
public static string GetChn(long l, bool bUpper)
{
费了九牛二虎之力才搞定的大写数字转换的代码.            
return GetChn(l.ToString(), bUpper);
费了九牛二虎之力才搞定的大写数字转换的代码.        }
        
费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.        
public static string GetRMBChn(string sDigital, bool bUpper)
{
费了九牛二虎之力才搞定的大写数字转换的代码.            
// 找出第一个点所在的位置,之前的部分用getchn来处理,之后的部分自已处理.
费了九牛二虎之力才搞定的大写数字转换的代码.
            if (sDigital == null | sDigital.Length == 0)
费了九牛二虎之力才搞定的大写数字转换的代码.                
return "";
费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.            
int iIndex = sDigital.IndexOf(".");
费了九牛二虎之力才搞定的大写数字转换的代码.            
string sIntPart;
费了九牛二虎之力才搞定的大写数字转换的代码.            
string sDecPart;
费了九牛二虎之力才搞定的大写数字转换的代码.            
if (iIndex == -1)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                sIntPart 
= sDigital;
费了九牛二虎之力才搞定的大写数字转换的代码.                sDecPart 
= "";
费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.            
else
{
费了九牛二虎之力才搞定的大写数字转换的代码.                sIntPart 
= sDigital.Substring(0, iIndex);
费了九牛二虎之力才搞定的大写数字转换的代码.                sDecPart 
= sDigital.Substring(iIndex+1);
费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.            StringBuilder sb 
= new StringBuilder(sDigital.Length * 2 + 10);
费了九牛二虎之力才搞定的大写数字转换的代码.            
foreach(char c in sDecPart)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                
if ( char.IsDigit(c))
{
费了九牛二虎之力才搞定的大写数字转换的代码.                    sb.Append(c);
费了九牛二虎之力才搞定的大写数字转换的代码.                }

费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.            sDecPart 
= sb.ToString();
费了九牛二虎之力才搞定的大写数字转换的代码.            sb.Length 
= 0;
费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.            
string sTmp = GetChn(sIntPart, bUpper);
费了九牛二虎之力才搞定的大写数字转换的代码.            
if (sTmp != "" && sTmp.Length != 0)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                sb.Append(sTmp);
费了九牛二虎之力才搞定的大写数字转换的代码.                sb.Append(bUpper
?'':'');            
费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.            
费了九牛二虎之力才搞定的大写数字转换的代码.            
bool bPrevIsZero = false;
费了九牛二虎之力才搞定的大写数字转换的代码.            
if (sIntPart.Length > 0 && sIntPart.EndsWith("0"&& sb.Length > 1)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                bPrevIsZero 
= true;
费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.            
for (int i = 0; i < sDecPart.Length && i < arRMBRight.Length; i ++)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                
if (sDecPart[i] == '0')
{
费了九牛二虎之力才搞定的大写数字转换的代码.                    bPrevIsZero 
= true;
费了九牛二虎之力才搞定的大写数字转换的代码.                }

费了九牛二虎之力才搞定的大写数字转换的代码.                
else
{
费了九牛二虎之力才搞定的大写数字转换的代码.                    
if (bPrevIsZero == true)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                        sb.Append(
'');
费了九牛二虎之力才搞定的大写数字转换的代码.                        bPrevIsZero 
= false;
费了九牛二虎之力才搞定的大写数字转换的代码.                    }

费了九牛二虎之力才搞定的大写数字转换的代码.                    sb.Append(bUpper
?arDigitals2[sDecPart[i] - '0']:arDigitals[sDecPart[i] - '0']);
费了九牛二虎之力才搞定的大写数字转换的代码.                    sb.Append(arRMBRight[i]);
费了九牛二虎之力才搞定的大写数字转换的代码.                }

费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.            
if (sb.Length > 0)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                sb.Append(
'');
费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.            
else
{
费了九牛二虎之力才搞定的大写数字转换的代码.                sb.Append(bUpper
?"零园整":"零元整");
费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.            
return sb.ToString();
费了九牛二虎之力才搞定的大写数字转换的代码.        }

费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.        
public static string GetChn(string s, bool bUpper)
{
费了九牛二虎之力才搞定的大写数字转换的代码.            
// 先将s过滤,删除所有的非数字字符。
费了九牛二虎之力才搞定的大写数字转换的代码.
            if (s == null || s.Trim().Length == 0)
费了九牛二虎之力才搞定的大写数字转换的代码.                
return "";
费了九牛二虎之力才搞定的大写数字转换的代码.            StringBuilder sb 
= new StringBuilder(s.Length);
费了九牛二虎之力才搞定的大写数字转换的代码.            
int iPointCount = 0;
费了九牛二虎之力才搞定的大写数字转换的代码.            
for(int i = 0; i < s.Length; i ++)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                
char c = s[i];
费了九牛二虎之力才搞定的大写数字转换的代码.                
if (Char.IsDigit(c))
{
费了九牛二虎之力才搞定的大写数字转换的代码.                    sb.Append(c);
费了九牛二虎之力才搞定的大写数字转换的代码.                }

费了九牛二虎之力才搞定的大写数字转换的代码.                
else if (c == '.')
{
费了九牛二虎之力才搞定的大写数字转换的代码.                    
// 如果是第二个之后的点,那么不管了。
费了九牛二虎之力才搞定的大写数字转换的代码.
                    if (iPointCount == 0)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                        sb.Append(c);
费了九牛二虎之力才搞定的大写数字转换的代码.                        iPointCount 
++;
费了九牛二虎之力才搞定的大写数字转换的代码.                    }
                                        
费了九牛二虎之力才搞定的大写数字转换的代码.                }

费了九牛二虎之力才搞定的大写数字转换的代码.                
else if( c == '-' && i == 0
{
费了九牛二虎之力才搞定的大写数字转换的代码.                    sb.Append(c);
费了九牛二虎之力才搞定的大写数字转换的代码.                }

费了九牛二虎之力才搞定的大写数字转换的代码.                
else
{
费了九牛二虎之力才搞定的大写数字转换的代码.                    
// 省下的全部忽略
费了九牛二虎之力才搞定的大写数字转换的代码.
                }
费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.            
string sDigital = sb.ToString();
费了九牛二虎之力才搞定的大写数字转换的代码.            
if (sDigital.EndsWith("."))
{
费了九牛二虎之力才搞定的大写数字转换的代码.                sDigital 
= sDigital.Substring(0,sDigital.Length - 1);
费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.            
if (sDigital.Length == 0)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                sDigital 
= "0";
费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.            
费了九牛二虎之力才搞定的大写数字转换的代码.            sb.Length 
= 0// 留为后用。
费了九牛二虎之力才搞定的大写数字转换的代码.            
费了九牛二虎之力才搞定的大写数字转换的代码.            
// 从小数点前后分为两部分
费了九牛二虎之力才搞定的大写数字转换的代码.
            int iTmp = sDigital.IndexOf('.');
费了九牛二虎之力才搞定的大写数字转换的代码.            
string sIntPart;
费了九牛二虎之力才搞定的大写数字转换的代码.            
string sDecimalPart;
费了九牛二虎之力才搞定的大写数字转换的代码.            
if (iTmp == -1)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                sIntPart 
= sDigital;
费了九牛二虎之力才搞定的大写数字转换的代码.                sDecimalPart 
= "";
费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.            
else
{
费了九牛二虎之力才搞定的大写数字转换的代码.                sIntPart 
= sDigital.Substring(0, iTmp);
费了九牛二虎之力才搞定的大写数字转换的代码.                sDecimalPart 
= sDigital.Substring(iTmp+1);
费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.            
// 处理小数点之前的部分
费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.            
// 先决定最高位是什么位,再依次地向后拼出。
费了九牛二虎之力才搞定的大写数字转换的代码.            
// 大循环是亿的个数, 小循环是万的个数。
费了九牛二虎之力才搞定的大写数字转换的代码.
            
费了九牛二虎之力才搞定的大写数字转换的代码.            sb 
= new StringBuilder(sDigital.Length * 2 + 6);
费了九牛二虎之力才搞定的大写数字转换的代码.            
if (sDigital.StartsWith("-"))
{
费了九牛二虎之力才搞定的大写数字转换的代码.                sb.Append(
"");
费了九牛二虎之力才搞定的大写数字转换的代码.                sIntPart 
= sIntPart.Substring(1);
费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.            
// 如果小数点之后没有内容,之前部分又是空,那么不输出.
费了九牛二虎之力才搞定的大写数字转换的代码.
            if (sIntPart.Length == 0 && sDecimalPart.Length == 0)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                
return "";
费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.            
int iBitCntInWan = 0;
费了九牛二虎之力才搞定的大写数字转换的代码.            
bool bPrevIs0 = false;
费了九牛二虎之力才搞定的大写数字转换的代码.            
int iWanNotZeroCnt = 0;
费了九牛二虎之力才搞定的大写数字转换的代码.            
int iNotZeroCnt = 0;
费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.            
for (int i = 0; i < sIntPart.Length; i ++)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                
int iBitCnt = sIntPart.Length - i -1;
费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.                
char cNum = sIntPart[i];
费了九牛二虎之力才搞定的大写数字转换的代码.                
if (cNum == '0')
{
费了九牛二虎之力才搞定的大写数字转换的代码.                    
// 如果是零,那么不处理
费了九牛二虎之力才搞定的大写数字转换的代码.
                    bPrevIs0 = true;
费了九牛二虎之力才搞定的大写数字转换的代码.                }

费了九牛二虎之力才搞定的大写数字转换的代码.                
else
{
费了九牛二虎之力才搞定的大写数字转换的代码.                    
if (bPrevIs0)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                        
// 如果上一个是0
费了九牛二虎之力才搞定的大写数字转换的代码.
                        if(iNotZeroCnt > 0)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                            
//如果不是第一个字 那么加一个零字                                    
费了九牛二虎之力才搞定的大写数字转换的代码.
                            sb.Append(bUpper?arDigitals2[0]:arDigitals[0]);
费了九牛二虎之力才搞定的大写数字转换的代码.                        }
                                
费了九牛二虎之力才搞定的大写数字转换的代码.                    }

费了九牛二虎之力才搞定的大写数字转换的代码.                    iWanNotZeroCnt 
++;
费了九牛二虎之力才搞定的大写数字转换的代码.                    iNotZeroCnt 
++;
费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.                    bPrevIs0 
= false;
费了九牛二虎之力才搞定的大写数字转换的代码.                    sb.Append(bUpper
?arDigitals2[cNum - '0']:arDigitals[cNum - '0']);    // 加数名
费了九牛二虎之力才搞定的大写数字转换的代码.
                    iBitCntInWan = iBitCnt % 4;
费了九牛二虎之力才搞定的大写数字转换的代码.                    
if (iBitCntInWan != 0)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                        sb.Append(bUpper
?arRights2[iBitCntInWan]:arRights[iBitCntInWan]);    // 加权名
费了九牛二虎之力才搞定的大写数字转换的代码.
                    }
费了九牛二虎之力才搞定的大写数字转换的代码.                }

费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.                
if (iBitCnt % 8 == 0)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                    
// 遇亿的处理
费了九牛二虎之力才搞定的大写数字转换的代码.
                    if (iBitCnt / 8 >= 1 && iNotZeroCnt > 0 )
费了九牛二虎之力才搞定的大写数字转换的代码.                        sb.Append(
'亿');
费了九牛二虎之力才搞定的大写数字转换的代码.                    bPrevIs0 
= false;
费了九牛二虎之力才搞定的大写数字转换的代码.                    iWanNotZeroCnt 
= 0;
费了九牛二虎之力才搞定的大写数字转换的代码.                }

费了九牛二虎之力才搞定的大写数字转换的代码.                
else if (iBitCnt % 4 == 0)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                    
// 遇万位的处理
费了九牛二虎之力才搞定的大写数字转换的代码.
                    if ((iBitCnt % 8)/4 >= 1 && iWanNotZeroCnt > 0 )
{
费了九牛二虎之力才搞定的大写数字转换的代码.                        sb.Append(
'');
费了九牛二虎之力才搞定的大写数字转换的代码.                    }

费了九牛二虎之力才搞定的大写数字转换的代码.                    bPrevIs0 
= false;
费了九牛二虎之力才搞定的大写数字转换的代码.                    iWanNotZeroCnt 
= 0;
费了九牛二虎之力才搞定的大写数字转换的代码.                }

费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.            
// 如果全部都是0,那么输出一个"零".
费了九牛二虎之力才搞定的大写数字转换的代码.
            if (iNotZeroCnt == 0)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                sb.Append(
"");
费了九牛二虎之力才搞定的大写数字转换的代码.            }
            
费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.            
// 处理小数点之后的部分
费了九牛二虎之力才搞定的大写数字转换的代码.
            if(sDecimalPart.Length != 0)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                sb.Append(
"");
费了九牛二虎之力才搞定的大写数字转换的代码.                
for(int i = 0;  i < sDecimalPart.Length; i ++)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                    sb.Append(bUpper
?arDigitals2[sDecimalPart[i]-'0']:arDigitals[sDecimalPart[i]-'0']);
费了九牛二虎之力才搞定的大写数字转换的代码.                }

费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.            iTmp 
= 0;
费了九牛二虎之力才搞定的大写数字转换的代码.            
if (sb[0== '')
{
费了九牛二虎之力才搞定的大写数字转换的代码.                iTmp 
=1;
费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.            
// 把起头的"一十"改为"拾".
费了九牛二虎之力才搞定的大写数字转换的代码.
            if (sb.Length >= 2)
{
费了九牛二虎之力才搞定的大写数字转换的代码.                
if (sb[iTmp] == (bUpper?arDigitals2[1]:arDigitals[1]) && 
费了九牛二虎之力才搞定的大写数字转换的代码.                    sb[iTmp 
+ 1== (bUpper?arRights2[1]:arRights[1]))
{
费了九牛二虎之力才搞定的大写数字转换的代码.                    sb.Remove(iTmp,
1);
费了九牛二虎之力才搞定的大写数字转换的代码.                }

费了九牛二虎之力才搞定的大写数字转换的代码.            }

费了九牛二虎之力才搞定的大写数字转换的代码.            
return sb.ToString();
费了九牛二虎之力才搞定的大写数字转换的代码.        }

费了九牛二虎之力才搞定的大写数字转换的代码.


费了九牛二虎之力才搞定的大写数字转换的代码.

{
费了九牛二虎之力才搞定的大写数字转换的代码.                                              
'','','','','','','','','',''
费了九牛二虎之力才搞定的大写数字转换的代码.                                              }
;
{
费了九牛二虎之力才搞定的大写数字转换的代码.                                                
'','','','','','','','','',''
费了九牛二虎之力才搞定的大写数字转换的代码.                                            }
;
费了九牛二虎之力才搞定的大写数字转换的代码.
;
费了九牛二虎之力才搞定的大写数字转换的代码.
费了九牛二虎之力才搞定的大写数字转换的代码.    }

费了九牛二虎之力才搞定的大写数字转换的代码.}

费了九牛二虎之力才搞定的大写数字转换的代码.

相关文章:

  • 2022-03-05
  • 2021-12-27
  • 2022-12-23
  • 2021-07-26
  • 2021-12-18
  • 2021-12-07
  • 2022-12-23
  • 2021-11-13
猜你喜欢
  • 2021-12-10
  • 2021-05-08
  • 2021-11-13
  • 2021-08-05
  • 2021-06-26
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案