以下是一個把BigDecimal轉化成中文的貨幣表示的一段代碼,博君一哂!
//中文金額單位數組
straChineseUnit?=?new?String[]?{"分",?"角",?"圓",?"拾",?"佰",?"仟",?"萬",?"拾",?"佰",?"仟",?"億",?"拾",?"佰",?"仟"};
//中文數字字符數組
straChineseNumber?=?new?String[]?{"零",?"壹",?"貳",?"叁",?"肆",?"伍",?"陸",?"柒",?"捌",?"玖"};
????/**
????*?Description???將數字金額轉換為中文金額
????*?@param????????<p>BigDecimal?bigdMoneyNumber?轉換前的數字金額</P>
????*?@return???????String
????調用:myToChineseCurrency("101.89")="壹佰零壹圓捌角玖分"
????myToChineseCurrency("100.89")="壹佰零捌角玖分"
????myToChineseCurrency("100")="壹佰圓整"
????*/
????public?String?DoNumberCurrencyToChineseCurrency(BigDecimal?bigdMoneyNumber)?{
????????String?strChineseCurrency?=?"";
????????//零數位標記
????????boolean?bZero?=?true;
????????//中文金額單位下標
????????int?ChineseUnitIndex?=?0;
????????DoPrintMessage("Calling?Method?DoNumberCurrencyToChineseCurrency");
????????try?{
????????????if?(bigdMoneyNumber.intValue()?==?0)
????????????????return?"零圓整";
????????????//處理小數部分,四舍五入
????????????double?doubMoneyNumber?=?Math.round(bigdMoneyNumber.doubleValue()?*?100);
????????????//是否負數
????????????boolean?bNegative?=?doubMoneyNumber?<?0;
????????????//取絕對值
????????????doubMoneyNumber?=?Math.abs(doubMoneyNumber);
????????????//循環處理轉換操作
????????????while?(doubMoneyNumber?>?0)?{
????????????????//整的處理(無小數位)
????????????????if?(ChineseUnitIndex?==?2?&&?strChineseCurrency.length()?==?0)
????????????????????strChineseCurrency?=?strChineseCurrency?+?"整";
????????????????//非零數位的處理
????????????????if?(doubMoneyNumber?%?10?>?0)?{
????????????????????strChineseCurrency?=?straChineseNumber[(int)doubMoneyNumber?%?10]?+?straChineseUnit[ChineseUnitIndex]?+?strChineseCurrency;
????????????????????bZero?=?false;
????????????????}
????????????????//零數位的處理
????????????????else?{
????????????????????//元的處理(個位)
????????????????????if?(ChineseUnitIndex?==?2?)?{
????????????????????????//段中有數字
????????????????????????if?(doubMoneyNumber?>?0)?{
????????????????????????????strChineseCurrency?=?straChineseUnit[ChineseUnitIndex]?+?strChineseCurrency;
????????????????????????????bZero?=?true;
????????????????????????}
????????????????????}
????????????????????//萬、億數位的處理
????????????????????else?if?(ChineseUnitIndex?==?6?||?ChineseUnitIndex?==?10)?{
????????????????????????//段中有數字
????????????????????????if?(doubMoneyNumber?%?1000?>?0)
????????????????????????????strChineseCurrency?=?straChineseUnit[ChineseUnitIndex]?+?strChineseCurrency;
????????????????????}
????????????????????//前一數位非零的處理
????????????????????if?(!bZero)
????????????????????????strChineseCurrency?=?straChineseNumber[0]?+?strChineseCurrency;
????????????????????bZero?=?true;
????????????????}
????????????????doubMoneyNumber?=?Math.floor(doubMoneyNumber?/?10);
????????????????ChineseUnitIndex?++;
????????????}
????????????//負數的處理
????????????if?(bNegative)
????????????????strChineseCurrency?=?"負"?+?strChineseCurrency;
????????}
????????catch?(Exception?e)?{
????????????DoPrintMessage("Exception?Reason??:?Call?Method?DoNumberCurrencyToChineseCurrency?Error");
????????????DoPrintMessage("Exception?Message?:?"?+?e.getMessage());
????????????e.printStackTrace();
????????????return?"";
????????}
????????return?strChineseCurrency;
????}
原文地址