想要实现人民币大写,在发票等场景中使用?? 1234.56显示为:壹仟贰佰叁拾肆元伍角陆分,那就往下看看吧!

本程序可以实现 0 到 9999 9999 9999.994 以内的人民币大写转换,精确到分

经典测试数据:

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 = 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

* 这里开启之后会显示成通俗易懂的格式,例如1001,会转化为:壹仟零壹元,而不是:壹仟零佰零拾壹元, 但我希望得到的是后面这种,因为发票所需显示的就是后面这种

**/

// if (firstFourBitRmb[i] == '0' && i

// boolean zeroFlag = false;

// while (i

// 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人民币大写转换脚本_Java实现人民币大写代码解析相关推荐

  1. java整形变量转换字符串_JAVA整型转换字符串以及相互转换的相关实例

    JAVA整型转换字符串以及相互转换的相关实例.java数据类型之间的转换.怎么把整数 int 转换成字串 String ?怎么把字符串 String 转换成整数 int类型? 整型与字符串转换实例: ...

  2. java rhino 运行 js_java 脚本引擎Rhino执行js代码和文件

    测试js脚本引擎 public class helloworld { public static void main(String[] args) throws Exception { //获得脚本引 ...

  3. java常用代码解析_Java设计模式常用原则代码解析

    本篇文章小编给大家分享一下Java设计模式常用原则代码解析,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 1.单一职责原则每一个类负责一个职责(一个类只有 ...

  4. java人民币大小写转换函数_java开发_数字转换汉语中人民币的大写_完整版

    1 package com.b510.number2char;2 3 import java.math.BigDecimal;4 5 /**6 * 数字转换为汉语中人民币的大写 7 *8 * @aut ...

  5. JAVA程序把大写转换小写_Java程序将字符串转换为小写和大写。

    示例 import java.lang.*; public class StringDemo { public static void main(String[] args) { //将所有大写字母转 ...

  6. java 实现汉字转换拼音_JAVA实现汉字转拼音功能代码实例

    JAVA中汉字转拼音的方法并不复杂,可以使用pinyin4j包来实现. 一.下载pinyin4j的架包,并导入项目中,如下: 如果是maven项目,maven依赖如下: com.belerweb pi ...

  7. java数据类型的转换函数_JAVA中常用数据类型转换函数

    JAVA中常用数据类型转换函数: string->byte Byte static byte parseByte(String s) byte->string Byte static St ...

  8. java int格式转换文本_java 文件导出Excel 文本形式转数字格式解决,字段是int导出需求是数字解决方案...

    问题:java字段是int类型等,然后导出时是文本,需要操作人员转换为数字格式. 应操作人员要求,导出的时候就是数字格式可以不用转换,方便操作等 java 后台处理过程: 这里我只处理表格的0,2,7 ...

  9. java 实现汉字转换拼音_Java实现汉字转换为拼音

    # re: Java实现汉字转换为拼音 2006-11-24 15:06 芦苇 JAVA将汉字转化成拼音的方法 /** *//** ################################## ...

  10. java 时分秒 转换 秒_JAVA将时分秒格式的时间转化成秒数

    展开全部 public class TimeToSecond { public static void main(String[] args) { String time ="01:22:1 ...

最新文章

  1. 简易RS232 建模二 (接收)
  2. php对象编程遇到的BUG!
  3. Python中简化的验证码功能实现
  4. programcreek
  5. 你真的懂你的用户吗?
  6. EIGRP个人学习笔记
  7. JavaFX图表(一)
  8. VMWare MAC系统调整磁盘
  9. Memstore数据刷写与阻塞机制深入剖析及参数优化
  10. poj 1986 Distance Queries LCA
  11. 【推荐实践】Hulu-视频理解在个性化推荐与内容发现中的应用.pdf(附下载链接)...
  12. 安装GPUtil包过程
  13. Q96:过程纹理(Procedural Texture)(0)——概述
  14. PyTorch 之 Checkpoint 机制解析
  15. Map集合常用方法总结
  16. Linux无线投屏软件,scrcpy - 手机无线投屏到电脑
  17. 双向晶闸管,调压电路,开关电路,楼梯灯电路,光控路灯,无电弧接触器电路
  18. kafka开启kerberos,报错server not found in kerberos database
  19. ERP系统各子系统功能模块页面
  20. 随机样本,方便样本与资源回应样本

热门文章

  1. 主曲率、高斯曲率、平均曲率的物理意义及公式
  2. c++ primer kindle_开箱测评掌阅iReader Ligtht悦享版阅读器,电纸书不止有kindle
  3. LCL三相PWM整流器数学模型
  4. Scrapy 中文手册 0.25 文档
  5. 深度可分离卷积解析 - MobileNetV1
  6. 深度探索C++对象模型电子书pdf下载
  7. OJ密码岛 1243.谢尔宾斯基三角形
  8. Excel怎么区分中文英文
  9. excel如何快速将英文表格翻译为中文表格
  10. Tbase 源码 (五)