在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序。

本题的任务是:从键盘输入一个十亿以内的正整数(int类型),把它转换为人民币金额大写(不考虑用户输入错误的情况)。

比如,用户输入:35201,程序输出:叁万伍仟贰佰零壹

用户输入:30201,程序输出:叁万零贰佰零壹

用户输入:30001,程序输出:叁万零壹

用户输入:31000,程序输出:叁万壹仟

用户输入:120023201,程序输出:壹亿贰仟零贰万叁仟贰佰零壹

用户输入:120020001,程序输出:壹亿贰仟零贰万零壹

用户输入:100000001,程序输出:壹亿零壹

可以看到,在万后满千位,则不加零,否则要补零,但不要出现类似“零零”的情况。

在亿后满千万位,则不加零,否则要补零,但整个“万档”没有数字时,“万”字省去。

package com.liu.ex7;

import java.util.Scanner;

public class Main {
public static String[] A = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; public String getPart(String temp) {
int num = Integer.valueOf(temp); //除去字符串前0
temp = num + "";
String result = "";
int len = temp.length();
for(int i = 0, j = len;i < len;i++, j--) {
int number = temp.charAt(i) - '0';
if(number == 0) {
//0在个位
if(i == len - 1)
break;
//0在十位
if(len == 3 && i == 1) {
int number1 = temp.charAt(i + 1) - '0';
if(number1 == 0)
break;
else
result = result + A[0];
}
//0在十位
if(len == 4 && i == 2) {
int number1 = temp.charAt(i + 1) - '0';
if(number1 == 0)
break;
else
result = result + A[0];
}
//0在百位
if(len == 4 && i == 1) {
int number1 = temp.charAt(i + 1) - '0';
int number2 = temp.charAt(i + 2) - '0';
if(number1 != 0)
result = result + A[0];
else if(number1 == 0 && number2 != 0) {
i = i + 1;
j = j - 1;
result = result + A[0];
} else if(number1 == 0 && number2 == 0) {
break;
}
}
}
if(number != 0) {
result = result + A[number];
if(j == 4)
result = result + "仟";
else if(j == 3)
result = result + "佰";
else if(j == 2)
result = result + "拾";
}
}
return result;
} public void getResult(int n) {
String result = "";
String temp = "" + n;
int len = temp.length();
if(len >= 9) {
String temp1 = temp.substring(len - 4, len);
String temp2 = temp.substring(len - 8, len - 4);
String temp3 = temp.substring(0, len - 8);
result = result + getPart(temp3) + "亿";
if(Integer.valueOf(temp2) < 1000 && Integer.valueOf(temp2) != 0)
result = result + A[0];
if(Integer.valueOf(temp2) == 0)
result = result + A[0];
else
result = result + getPart(temp2) + "万";
if(Integer.valueOf(temp1) != 0) {
if(Integer.valueOf(temp2) != 0 && Integer.valueOf(temp1) < 1000)
result = result + A[0];
result = result + getPart(temp1);
}
} else if(len >= 5 && len < 9) {
String temp1 = temp.substring(len - 4, len);
String temp2 = temp.substring(0, len - 4);
result = result + getPart(temp2) + "万";
if(Integer.valueOf(temp1) != 0) {
if(Integer.valueOf(temp1) < 1000)
result = result + A[0];
result = result + getPart(temp1);
}
} else if(len > 0 && len < 5) {
result = result + getPart(temp);
}
System.out.println(result);
return;
} public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
test.getResult(n);
}
}

java实现人民币金额大写的更多相关文章

  1. Java实现人民币大写精讲

    想要实现人民币大写,在发票等场景中使用?? 1234.56显示为:壹仟贰佰叁拾肆元伍角陆分,那就往下看看吧! 本程序可以实现 0 到 9999 9999 9999.994 以内的人民币大写转换,精确到 ...

  2. Java实现人民币大写代码解析

    想要实现人民币大写,在发票等场景中使用?? 1234.56显示为:壹仟贰佰叁拾肆元伍角陆分,那就往下看看吧! 本程序可以实现 0 到 9999 9999 9999.994 以内的人民币大写转换,精确到 ...

  3. java实现人民币数字转大写(转)

    原文:http://www.codeceo.com/article/java-currency-upcase.html 0 希望转换出来的结果为: 零元零角零分 1234 希望转换出来的结果为: 壹仟 ...

  4. Java版 数字金额大写转换

    需求:读入一个浮点数值,将其转化为中文金额的大写形式.如123.45,转化为:壹佰贰拾叁元肆角伍分. 以下是各种情况要完善: 1. 当金额为整数,只表示整数部分,省略小数部分,并添加“整”字.如123 ...

  5. C#人民币金额大写转换

    人民币金额大小写转换,三行代码 //完善了一下查询到的方法,支持小数,保留2位小数 public string NumGetStr(double Num) { string[] DX_SZ = { & ...

  6. php数字转人民币金额大写

    numToRmb.php <?php header("content-type:text/html;charset=utf-8"); function numToRmb($n ...

  7. 算法笔记_126:算法集训之编程大题集二(Java)

     目录 1 连续数的公倍数 2 漏掉的账目明细 3 罗马数字转十进制 4 逻辑推断 5 平面4点最小距离 6 取球博弈 7 人民币金额大写 8 人员排日程 9 三角螺旋阵 10 手机尾号评分   1 ...

  8. Word 宏命令大全

      1.   为宏命令指定快捷键.在WORD中,操作可以通过菜单项或工具栏按钮实现,如果功能项有对应的快捷键的话,利用快捷键可以快速实现我们需要的功能.如最常见的CTRL+O.CTRL+A等等.WOR ...

  9. ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】4.5

    摘要:VB/C#.Net实体代码生成工具(EntitysCodeGenerate)[ECG]是一款专门为.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的程序代码基于OO.ADO.N ...

随机推荐

  1. 01python基础入门

    一.了解python 1.总结一句话:简单易用,相对于java易学,容易上手.如果你不知道学什么语言或者先入门的话,这个是首选, 毕竟小学生也开始学了.对你有用或者是你的爱好就坚定的开始学吧! 2.下 ...

  2. 系统学习scala--基础

    scala基础 安装scala(不推荐使用最新版本,2.11.x够用了) scala官网 2.11.12版本下载页面 这里我选择2.11.12版本,在下载页面往下拉,选择scala-2.11.12.m ...

  3. 5.4 Go 闭包

    5.4 Go 闭包 闭包(closure):是由一个函数和其相关的引用环境组合的一个整体.(闭包=函数+引用环境) package main import ( "fmt" ) // ...

  4. doxygen+graphviz轻松绘制函数调用图(call graph)

    前言 之前的工作环境习惯了使用source insight查看函数分析代码,切换到mac下后改用vscode,发现缺少函数调用关系图生成.跨平台的understand可以很好的解决,但是公司没有购买, ...

  5. 博客营销(Blog Marketing)

    一.什么是博客营销 博客营销(Blog Marketing)的概念可以说并没有严格的定义,简单来说,就是利用博客这种网络应用形式开展网络营销.要说明什么是博客营销,首先要从什么是博客说起. 博客(Bl ...

  6. ThinkPHP6.0 容器和依赖注入

    ThinkPHP6.0 容器和依赖注入 分为如下两部分: 依赖注入 容器 依赖注入 依赖注入其实本质上是指对类的依赖通过构造器完成自动注入: 在控制器架构方法和操作和方法中一旦对参数进行对象类型约束则 ...

  7. Gym101635K Blowing Candles

    题目链接:http://codeforces.com/gym/101635 题目大意: 推荐一篇文章:https://blog.csdn.net/wang_heng199/article/detail ...

  8. POJ2991

    题目链接:https://vjudge.net/problem/POJ-2991 知识准备: 1.向量旋转公式:向量(x,y)逆时针旋转角度A,则旋转后的向量为(x*cos A-y*sin A, x* ...

  9. Pyqt5_QlineEdit

    QlineEdit 方法 setAlignment() 按固定值方式对齐文本 Qt.AlignLeft:水平方向靠左对齐 Qt.AlignRight:水平方向靠右对齐 Qt.AlignCenter:水 ...

  10. [wordpress使用]002_主题

    使用WordPress作为博客内容管理系统有一个很大的好处是,WordPress拥有大量的优秀的免费模板.你所需要的是下载安装,和稍作修改.下面接着开始WordPress教程:WordPress主题 ...