无线&移动互联网技术研发

换位思考·····
posts - 19, comments - 53, trackbacks - 0, articles - 283
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

java 将数字金额转化为汉字(摘)

Posted on 2009-05-15 22:09 Gavin.lee 阅读(624) 评论(1)  编辑  收藏 所属分类: java SE & EE
摘 :http://www.java2000.net/p32


import java.math.BigDecimal;   
  
public class ConvertNumber 
{   
  
/** 定义数组存放数字对应的大写 */
  
  
private final static String[] STR_NUMBER = """""""""""""""""""" }
;   
  
  
/** 定义数组存放位数的大写 */
  
  
private final static String[] STR_MODIFY = """""""""""""""""亿""""""" }
;   
  
  
/**  
   * 转化整数部分  
   *   
   * 
@param
 tempString  
   * 
@return
 返回整数部分  
   
*/
  
  
private static String getInteger(String tempString) 
{   
    
/** 用来保存整数部分数字串 */
  
    String strInteger 
= null;//     

    /** 记录"."所在位置 */  
    
int intDotPos = tempString.indexOf("."
);   
    
int intSignPos = tempString.indexOf("-"
);   
    
if (intDotPos == -1
)   
      intDotPos 
=
 tempString.length();   
    
/** 取出整数部分 */
  
    strInteger 
= tempString.substring(intSignPos + 1
, intDotPos);   
    strInteger 
= new
 StringBuffer(strInteger).reverse().toString();   
    StringBuffer sbResult 
= new
 StringBuffer();   
    
for (int i = 0; i < strInteger.length(); i++
{   
      sbResult.append(STR_MODIFY[i]);   
      sbResult.append(STR_NUMBER[strInteger.charAt(i) 
- 48
]);   
    }
   
       
    sbResult 
=
 sbResult.reverse();   
    replace(sbResult, 
"零拾"""
);   
    replace(sbResult, 
"零佰"""
);   
    replace(sbResult, 
"零仟"""
);   
    replace(sbResult, 
"零万"""
);   
    replace(sbResult, 
"零亿""亿"
);   
    replace(sbResult, 
"零零"""
);   
    replace(sbResult, 
"零零零"""
);   
    
/** 这两句不能颠倒顺序 */
  
    replace(sbResult, 
"零零零零万"""
);   
    replace(sbResult, 
"零零零零"""
);   
    
/** 这样读起来更习惯. */
  
    replace(sbResult, 
"壹拾亿""拾亿"
);   
    replace(sbResult, 
"壹拾万""拾万"
);   
    
/** 删除个位上的零 */
  
    
if (sbResult.charAt(sbResult.length() - 1== '' && sbResult.length() != 1
)   
      sbResult.deleteCharAt(sbResult.length() 
- 1
);   
    
if (strInteger.length() == 2
{   
      replace(sbResult, 
"壹拾"""
);   
    }
   
    
/** 将结果反转回来. */
  
    
return
 sbResult.toString();   
  }
   
  
  
/**  
   * 转化小数部分 例:输入22.34返回叁肆  
   *   
   * 
@param
 tempString  
   * 
@return
  
   
*/
  
  
private static String getFraction(String tempString) 
{   
    String strFraction 
= null
;   
    
int intDotPos = tempString.indexOf("."
);   
    
/** 没有点说明没有小数,直接返回 */
  
    
if (intDotPos == -1
)   
      
return ""
;   
    strFraction 
= tempString.substring(intDotPos + 1
);   
    StringBuffer sbResult 
= new
 StringBuffer(strFraction.length());   
    
for (int i = 0; i < strFraction.length(); i++
{   
      sbResult.append(STR_NUMBER[strFraction.charAt(i) 
- 48
]);   
    }
   
    
return
 sbResult.toString();   
  }
   
  
  
/**  
   * 判断传入的字符串中是否有.如果有则返回点  
   *   
   * 
@param
 tempString  
   * 
@return
  
   
*/
  
  
private static String getDot(String tempString) 
{   
    
return tempString.indexOf("."!= -1 ? "" : ""
;   
  }
   
  
  
/**  
   * 判断传入的字符串中是否有-如果有则返回负  
   *   
   * 
@param
 tempString  
   * 
@return
  
   
*/
  
  
private static String getSign(String tempString) 
{   
    
return tempString.indexOf("-"!= -1 ? "" : ""
;   
  }
   
  
  
/**  
   * 将一个数字转化为金额  
   *   
   * 
@param
 tempNumber 传入一个double的变量  
   * 
@return
 返一个转换好的字符串  
   
*/
  
  
public static String numberToChinese(double tempNumber) 
{   
    java.text.DecimalFormat df 
= new java.text.DecimalFormat("#.#########"
);   
    String pTemp 
=
 String.valueOf(df.format(tempNumber));   
    StringBuffer sbResult 
= new StringBuffer(getSign(pTemp) + getInteger(pTemp) + getDot(pTemp) +
 getFraction(pTemp));   
    
return
 sbResult.toString();   
  }
   
  
  
public static String numberToChinese(BigDecimal tempNumber) 
{   
    
return
 numberToChinese(tempNumber.doubleValue());   
  }
   
  
  
/**  
   * 替代字符  
   *   
   * 
@param
 pValue  
   * 
@param
 pSource  
   * 
@param
 pDest  
   
*/
  
  
private static void replace(StringBuffer pValue, String pSource, String pDest) 
{   
    
if (pValue == null || pSource == null || pDest == null
)   
      
return
;   
    
/** 记录pSource在pValue中的位置 */
  
    
int intPos = 0
;   
    
do 
{   
      intPos 
=
 pValue.toString().indexOf(pSource);   
      
/** 没有找到pSource */
  
      
if (intPos == -1
)   
        
break
;   
      pValue.delete(intPos, intPos 
+
 pSource.length());   
      pValue.insert(intPos, pDest);   
    }
 while (true);   
  }
   
  
  
/**  
   * 
@param
 args  
   
*/
  
  
public static void main(String[] args) 
{   
    System.out.println(numberToChinese(
1230400567.8934
));   
  }
   
}
  

评论

# re: java 将数字金额转化为汉字(摘)  回复  更多评论   

2012-09-19 15:34 by 线程
好机会

只有注册用户登录后才能发表评论。


网站导航: