天空是蓝色的

做好软件为中国 #gcc -c helloworld.c -o helloworld.o //编译目标文件 #gcc helloworld.o -o helloworld //编译成可执行exe #helloworld //运行exe
数据加载中……
Java中实现数字金额到中文大写字符的转换
/**
  * <p>Title: money</p>
  * <p>Description: 
  *   *类名:money
  *   *函数:String PositiveIntegerToHanStr(String NumStr)   负责把小数点前面的数转换为大写中文
  *    *函数:?String NumToRMBStr(double val)   负责把输入的double型的数转换为大写中文
  *   *注意java程序转换的范围是:小数点前面15位(已测试通过  
  *   * <p>Company: </p>
  * 钟伟海
  * 
@version 1.0
  
*/  
import java.lang.Math;

public class money{
 
//调试时用main函数
 public static void main(String args[]){
  money mon 
= new money();
  System.out.println(
-99999999999999.999+mon.NumToRMBStr(-99999999999999.999));
  System.out.println(
99999999999999.999+mon.NumToRMBStr(99999999999999.999));
  System.out.println(mon.NumToRMBStr(
100000000.00));
  System.out.println(mon.NumToRMBStr(
100000001.00));
  
  System.out.println(mon.NumToRMBStr(
236.21));
 }
 
 String HanDigiStr[] 
= new String[]{"","","","","","","","","",""};

 String HanDiviStr[] 
= new String[]{"","","","","","","","","亿",
     
"","","","","","","","亿",
     
"","","","","","","" };
     
 
 String PositiveIntegerToHanStr(String NumStr)
 {     
// 输入字符串必须正整数,只允许前导空格(必须右对齐),不宜有前导零
  String RMBStr = "";
  
boolean lastzero = false;
  
boolean hasvalue= false;       // 亿、万进位前有数值标记
  int len,n;
  len 
= NumStr.length();
  
if( len > 15 ) return "数值过大!";
  
for(int i=len-1;i>=0;i--) {
   
if( NumStr.charAt(len-i-1)==' ' ) continue;      
   n 
= NumStr.charAt(len-i-1- '0';
   
if( n<0 || n>9 ) return "输入含非数字字符!";
   
   
if( n!=0 ) {
    
if( lastzero ) RMBStr += HanDigiStr[0];  // 若干零后若跟非零值,只显示一个零
            
// 除了亿万前的零不带到后面
    
//if( !( n==1 && (i%4)==1 && (lastzero || i==len-1) ) )    // 如十进位前有零也不发壹音用此行
    if!( n==1 && (i%4)==1 && i==len-1 ) )     // 十进位处于第一位不发壹音
     RMBStr += HanDigiStr[n];
    RMBStr 
+= HanDiviStr[i];    // 非零值后加进位,个位为空
    hasvalue = true;                                    // 置万进位前有值标记
    
   }
else {
    
if( (i%8)==0 || ((i%8)==4 && hasvalue) )  // 亿万之间必须有非零值方显示万
     RMBStr += HanDiviStr[i];   // “亿”或“万”
   }
   
if( i%8==0 ) hasvalue = false ;      // 万进位前有值标记逢亿复位
   lastzero = (n==0&& (i%4!=0);    
   }
 
  
if( RMBStr.length()==0 ) return HanDigiStr[0];         // 输入空字符或"0",返回"零"
  return RMBStr;
 }
 
 String NumToRMBStr(
double val)
 {
  String SignStr 
="" ;
  String TailStr 
="";
  
long  fraction, integer;
  
int jiao,fen;
 
  
if( val<0 ) {
   val 
= -val;
   SignStr 
= "";
   }
  
if(val > 99999999999999.999 || val <-99999999999999.999 ) return "数值位数过大!";
  
// 四舍五入到分  
  long temp = Math.round(val*100); 
  integer 
= temp/100;
  fraction 
= temp%100;
  jiao 
= (int)fraction/10;
  fen 
= (int)fraction%10;
  
if( jiao==0 && fen==0 ) {
   TailStr 
= "";
   }
  
else {
   TailStr 
= HanDigiStr[jiao];
   
if( jiao!=0 )
    TailStr 
+= "";
   
if( integer==0 && jiao==0 )                // 零元后不写零几分
    TailStr = "";
   
if( fen!=0 )
    TailStr 
+= HanDigiStr[fen] + "";
   }
 
 
// 下一行可用于非正规金融场合,0.03只显示“叁分”而不是“零元叁分”
 
//        if( !integer ) return  SignStr+TailStr;
 
  
return ""+SignStr+PositiveIntegerToHanStr(String.valueOf(integer) )+""+TailStr;
 }
 
}
//END public class money

此日记TrackBack地址: http://yhe.dalian.cn/trackback.do?log_id=203

posted on 2005-11-25 09:36 bluesky 阅读(508) 评论(0)  编辑  收藏 所属分类: 工作总结


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


网站导航: