`
shihuan830619
  • 浏览: 574971 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java中数字转大写货币(支持到千亿)

阅读更多
public class MoneyToOther {
	/**
	 * 支持到千亿,超过千亿就报错了
	 * */
	public static String changeToBig(double value){
		char [] hunit = {'拾', '佰', '仟'};     //段内位置表示 
        char [] vunit = {'万', '亿'};     //段名表示 
        char [] digit = {'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'}; //数字表示 
        long midVal = (long)(value * 100);     //转化成整形 
        String valStr = String.valueOf(midVal);  //转化成字符串 
        String head = valStr.substring(0, valStr.length() - 2);  //取整数部分 
        String rail = valStr.substring(valStr.length() - 2);  //取小数部分 

        String prefix = "" ;        //整数部分转化的结果 
        String suffix = "" ;       //小数部分转化的结果
        //处理小数点后面的数 
        if(rail.equals("00")){     //如果小数部分为0 
        	suffix = "整";
        }else{
        	suffix = digit[rail.charAt( 0 ) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分" ;  //否则把角分转化出来 
        }
        //处理小数点前面的数 
        char [] chDig = head.toCharArray();     //把整数部分转化成字符数组 
        char zero = '0';           //标志'0'表示出现过0 
        byte zeroSerNum = 0;      //连续出现0的次数 
        for(int i = 0; i <chDig.length; i++){     //循环处理每个数字 
        	int idx = (chDig.length - i - 1) % 4 ;    //取段内位置 
        	int vidx = (chDig.length - i - 1) / 4 ;   //取段位置 
        	if (chDig[i] == '0'){                //如果当前字符是0 
        		zeroSerNum ++ ;             //连续0次数递增 
        		if (zero == '0'){           //标志 
        			zero = digit[0];
        		} else if (idx == 0 && vidx > 0 && zeroSerNum < 4){
        			prefix += vunit[vidx - 1];
        			zero = '0';
        		}
        		continue;
        	}
        	zeroSerNum = 0;       //连续0次数清零 
        	if (zero != '0') {    //如果标志不为0,则加上,例如万,亿什么的 
        		prefix += zero;
        		zero = '0';
        	}
        	prefix += digit[chDig[i] - '0'];      //转化该数字表示 
        	if (idx > 0) prefix += hunit[idx - 1];                  
        	if (idx == 0 && vidx > 0){
        		prefix += vunit[vidx - 1];  //段结束位置应该加上段名如万,亿 
        	}
        }

        if (prefix.length() > 0) prefix += '元'; //如果整数部分存在,则有元的字样 
        return prefix + suffix;    //返回正确表示 
     } 

	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String tmp = changeToBig(976662340912.23);
		System.out.println(tmp);
		tmp = changeToBig(2071234.00);
		System.out.println(tmp);
		tmp = changeToBig(100234.00);
		System.out.println(tmp);
		tmp = changeToBig(100000.00);
		System.out.println(tmp);
		tmp = changeToBig(10000000.00);
		System.out.println(tmp);
	}
分享到:
评论

相关推荐

    java钱币小写转换大写

    java钱币小写转换大写

    java写的货币转换

    自己的一个java程序,可以把数字转换成大写. 例如:1转换输出 壹元.

    JAVA--达内培训笔记

    由字母(汉语中的一个汉字是一个字母),数字,下划线和货币符号组成,不能以数字开头。 大小写敏感 没有长度限制,不能有空格 不能使用Java的关键字和保留字 java中的关键字 goto和const在java中虽然不再...

    NumberToCNUtil.java

    汉语中数字大写,把输入的金额转换为汉语中人民币的大写,汉语中货币单位大写,金额的精度,"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖

    Java经典编程源码基础例程300.zip

    Java经典编程源码例程,可以做为你的学习设计参考。 第1章 Java语言概述 1 ...实例079 将数字格式化为货币字符串 122 实例080 货币金额大写格式 123 实例081 String类格式化当前日期 125 实例082 字符串大小写转换 1

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例062 货币金额大写格式 78 实例063 String类格式化当前日期 80 实例064 字符串大小写转换 82 实例065 字符与Unicode码的转换 83 4.2 辨别字符串 84 实例066 判断用户名是否正确 84 实例067 用户名排序 85 实例068...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    * \p{Sc} A currency symbol \p{Sc} 货币符号 * \P{InGreek} Any character except one in the Greek block (negation) \P{InGreek} 除希腊语种字符外的任意字符 (negation) * [\p{L}&&[^\p{Lu...

    Java常用工具类(持续发布,第一部分:日期、字符串、JSON工具类等)

    包含了货币工具类(将数字货币转成大写)、日期工具类(日期格式化、日期相加减、日期差等)、半角和全角字符相互转换、JSON工具类(利用gson工具包)、字符串工具类(非空判断等)

    Java-PHP-C#

    如何构建一个模式来匹配 货币数量 的输入 好了,现在我们要用我们所学的来干一些有用的事:构建一个匹配模式去检查输入的信息是否为一个表示money的数字。我们认为一个表示money的数量有四种方式: "10000.00" 和 ...

    freemarker总结

    使用import指令导入库到模板中,Freemarker会为导入的库创建新的名字空间,并可以通过import指令中指定的散列变量访问库中的变量: ${my.mail} ${mail} 输出结果: &lt;p&gt;Copyright (C) 1999-2002 ...

    2009达内SQL学习笔记

    如:prod_price="" 这种写法是错的(不要受到corejava的影响) prod_price=NULL 这种写法是错的(不要受到corejava的影响) prod_price IS NULL 这种写法才是对的 NVL:处理空值,把空值转化为指定值。可转化为日期、...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    说明:将sql*plus屏幕中的内容输出到指定的文件 用法:开始印刷-&gt;spool 文件名 结束印刷-&gt;spool off 列子: 文件内容 9. 显示宽度 (linesize) 说明:设置显示行的宽度,默认是80个字符 用法:set linesize 120 ...

Global site tag (gtag.js) - Google Analytics