java实现人民币数字转大写(转)
原文:http://www.codeceo.com/article/java-currency-upcase.html
0
希望转换出来的结果为:
零元零角零分
1234
希望转换出来的结果为:
壹仟贰佰叁拾肆元零角零分
9999
希望转换出来的结果为:
玖仟玖佰玖拾玖元零角零分
1234.5
希望转换出来的结果为:
壹仟贰佰叁拾肆元伍角零分
1234.9
希望转换出来的结果为:
壹仟贰佰叁拾肆元玖角零分
1234.56
希望转换出来的结果为:
壹仟贰佰叁拾肆元伍角陆分
1234.99
希望转换出来的结果为:
壹仟贰佰叁拾肆元玖角玖分
1234.994
希望转换出来的结果为:
壹仟贰佰叁拾肆元玖角玖分
1234.999
希望转换出来的结果为:
壹仟贰佰叁拾伍元零角零分
999999999999.999
希望转换出来的结果为:
数据过大,无法进行转换,请重新输入!
package com.tfj.algorithm;
import java.util.Scanner;
public class RenMingBi {
    private boolean zero;
    String[] strHan = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
    String[] moneyCount = { "", "拾", "佰", "仟" };
    RenMingBi() {
        zero = false;
    }
    private String[] divide(double digitalRmbValue) {
        // 处理整数
        long intPart = (long) (digitalRmbValue);
        // 处理小数,把小数转换成整数形式处理,并进行四舍五入,此时小数四舍五入之后为100的应该另外加一层处理
        long decimalPart = Math
                .round((double) Math.round((digitalRmbValue - intPart) * 10000) / 100);
        // System.out.println("整数部分为:" + intPart + "小数部分为:" + (digitalRmbValue - intPart));
        if (decimalPart == 100) {
            intPart += 1;
        }
        // System.out.println("四舍五入之后整数部分为:" + intPart + "小数部分为:" + decimalPart);
        String strIntPart = "";
        if (intPart == 0)
            strIntPart = "0";
        else {
            strIntPart = "" + intPart;
        }
        String strDecimalPart = "";
        if (decimalPart < 10 && decimalPart >= 0)
            strDecimalPart = "0" + decimalPart;
        else {
            strDecimalPart = "" + decimalPart;
        }
        // 处理输入为0的时候
        if (intPart == 0 && decimalPart == 0) {
            zero = true;
        }
        // System.out.println("准换为String后,整数部分为:" + strIntPart + "小数部分为:" + strDecimalPart);
        return new String[] { strIntPart, strDecimalPart };
    }
    // 用来转换小数部分
    private String transDecimal(String str) {
        if (str.equals("100") || str.equals("00")) {
            return "零角零分";
        } else {
            String strResult;
            char[] strRmb = new char[20];
            strRmb = str.toCharArray();
            if (strRmb[0] == '0' && strRmb[1] == '0') {
                strResult = "";
            } else {
                int dm = strRmb[0] - '0';
                int dn = strRmb[1] - '0';
                strResult = strHan[dm] + "角" + strHan[dn] + "分";
            }
            return strResult;
        }
    }
    // 用来转换整数部分
    private String transInt(String str) {
        char[] firstFourBitRmb = new char[20];
        firstFourBitRmb = str.toCharArray();
        int len = firstFourBitRmb.length;
        String strResult = "";
        for (int i = 0; i < len; i++) {
            /**
             * 这里开启之后会显示成通俗易懂的格式,例如1001,会转化为:壹仟零壹元,而不是:壹仟零佰零拾壹元, 但我希望得到的是后面这种,因为发票所需显示的就是后面这种
             **/
            // if (firstFourBitRmb[i] == '0' && i < len) {
            // boolean zeroFlag = false;
            // while (i < len && firstFourBitRmb[i] == '0') {
            // zeroFlag = true;
            // i++;
            // }
            // if (i != len && zeroFlag == true)
            // strResult += "零";
            // i--;
            // } else {
            // int m = firstFourBitRmb[i] - '0';
            // strResult += strHan[m] + moneyCount[len - i - 1];
            // }
            int m = firstFourBitRmb[i] - '0';
            strResult += strHan[m] + moneyCount[len - i - 1];
        }
        return strResult;
    }
    public String transComb() {
        String[] strTempRmb = new String[2];
        double strValue = 0D;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入具体金额,结果会精确到分:");
        strValue = sc.nextDouble();
        RenMingBi nr = new RenMingBi();
        strTempRmb = nr.divide(strValue);
        // 转换小数部分
        String result1 = nr.transDecimal(strTempRmb[1]);
        // 转换整数部分
        String result2 = "";
        int len = strTempRmb[0].length();
        if (len > 12)
            return "数据过大,无法进行转换,请重新输入!";
        else {
            if (len >= 9) {
                String strBit1 = strTempRmb[0].substring(0, len - 8);
                String strBit2 = strTempRmb[0].substring(len - 8, len - 4);
                String strBit3 = strTempRmb[0].substring(len - 4, len);
                String strResult1 = nr.transInt(strBit1) + "亿";
                String strResult2 = nr.transInt(strBit2) + "万";
                String strResult3 = nr.transInt(strBit3) + "元";
                result2 = strResult1 + strResult2 + strResult3;
            } else if (len >= 5) {
                String strBit1 = strTempRmb[0].substring(0, len - 4);
                String strBit2 = strTempRmb[0].substring(len - 4, len);
                String strResult1 = nr.transInt(strBit1) + "万";
                String strResult2 = nr.transInt(strBit2) + "元";
                result2 = strResult1 + strResult2;
            } else if (len >= 1) {
                if (nr.zero == true) {
                    result2 = "零元";
                } else
                    result2 = nr.transInt(strTempRmb[0]) + "元";
            }
            return result2 + result1;
        }
    }
    public static void main(String[] args) {
        RenMingBi rmb = new RenMingBi();
        while (true) {
            System.out.println(rmb.transComb());
        }
    }
}
java实现人民币数字转大写(转)的更多相关文章
- js将人民币数字转大写
		
function numberToUpper(money) { var cnNums = new Array("零", "壹", "贰", ...
 - Java实现将数字转为大写汉字
		
public class Int2Big { static String int2big(int src) { final String num[] = {"零", "壹 ...
 - SQLSERVER中的人民币数字转大写的函数实现
		
CREATE FUNCTION [dbo].[f_num_chn] (@num numeric(14,5))RETURNS varchar(100) WITH ENCRYPTIONASBEGIN-- ...
 - java开发_数字转换汉语中人民币的大写_完整版
		
做这个应用,源于突然的一个想法:看到发票上面的数字要转换成汉语中人民币的大写 于是就有了下面的这些事儿..... 先看看运行效果: ================================== ...
 - java实现人民币金额大写
		
在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序. 本题的任务是:从键盘输入一个十亿以内的正整数(int类型),把它转换为人民币金额大写(不考虑用户输入错误的情况). 比如,用户输 ...
 - php人民币小写转大写函数,不限长度,精确到分
		
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ustb80.blog.51cto.com/6139482/1035327 在打印 ...
 - 【JS】数字转大写中文
		
原文参考 逛到一道面试题,数字转大写中文的,搜索学习并记录于此. //自动转换数字金额为大小写中文字符,返回大小写中文字符串,最大处理到999兆 function changeMoneyToChine ...
 - Oracle java.sql.SQLException: 数字溢出
		
六月 30, 2016 5:47:47 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinit ...
 - java string,需要进行首字母大写改写
		
java string,需要进行首字母大写改写,网上大家的思路基本一致,就是将首字母截取,转化成大写然后再串上后面的,类似如下代码 //首字母大写 public static String c ...
 
随机推荐
- node.js官方文档解析 01—assert 断言
			
assert-------断言 new assert.AssertionError(options) Error 的一个子类,表明断言的失败. options(选项)有下列对象 message < ...
 - Spring MVC 原理探秘 - 容器的创建过程
			
1.简介 在上一篇文章中,我向大家介绍了 Spring MVC 是如何处理 HTTP 请求的.Spring MVC 可对外提供服务时,说明其已经处于了就绪状态.再次之前,Spring MVC 需要进行 ...
 - 马昕璐 201771010118《面向对象程序设计(java)》第六周学习总结
			
第一部分:理论知识学习部分 1.继承 继承:用已有类来构建新类的一种机制.当定义了一个新类继承了一个类时,这个新类就继承了这个类的方法和域,同时在新类中添加新的方法和域以适应新的情况. 继承是Java ...
 - Jenkins-权限管理
			
一.要对用户进行管理首先下载一个权限管理插件(系统管理>>>插件管理) Role-based Authorization Strategy 系统管理 >>>全局 ...
 - js中函数创建的三种方式
			
1.函数声明 function sum1(n1,n2){ return n1+n2; }; 2.函数表达式,又叫函数字面量 var sum2=function(n1,n2){ re ...
 - 电子产品使用感受之--DJI OSMO Pocket VS OSMO MOBILE
			
2019.02.20 更新 打算出掉OSMO MOBILE,有需要的可以联系我啊 2019.1.26 更新 快要到春节了,购物中心的过年气氛很浓,网络上也是喜气洋洋. 今年天津有很多活动在春节期间举办 ...
 - Fiddler抓取数据并分析(完整的配置教程)
			
一.Fiddler现在的移动应用程序几乎都会和网络打交道,所以在分析一个 app 的时候,如果可以抓取出其发出的数据包,将对分析程序的流程和逻辑有极大的帮助.对于HTTP包来说,已经有很多种分析的方法 ...
 - 深度学习基础(五)ResNet_Deep Residual Learning for Image Recognition
			
ResNet可以说是在过去几年中计算机视觉和深度学习领域最具开创性的工作.在其面世以后,目标检测.图像分割等任务中著名的网络模型纷纷借鉴其思想,进一步提升了各自的性能,比如yolo,Inception ...
 - linux 常用压缩解压命令
			
压缩格式 打包/解压 执行命令 .tar 解包 tar ...
 - python函数把可变数据类型当默认参数值的问题(转)
			
add by zhj: 文章写的很好,其实只要默认参数在函数中只读不写,那默认值就不会被修改,可变类型做默认参数就不会有问题 方法二中,当result is None时,修改result的指向,不再指 ...