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 ...
随机推荐
- 洛谷.5283.[十二省联考2019]异或粽子(可持久化Trie 堆)
LOJ 洛谷 考场上都拍上了,8:50才发现我读错了题=-= 两天都读错题...醉惹... \(Solution1\) 先求一遍前缀异或和. 假设左端点是\(i\),那么我们要在\([i,n]\)中找 ...
- Git Sever搭建与相关错误处理
搭建 安装git: sudo apt-get install git 创建一个git用户,用来运行git服务:(用自己的用户也可以,其实) sudo adduser git 创建证书登录: 收集所有需 ...
- 影响CSS的margin合并的几个属性
很多人知道,在CSS中存在Margin合并的现象,比如下代码: <style> div { margin:10px; height:100px; background:red; } < ...
- ZooKeeper Getting Started Guide
http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html What is ZooKeeper? ZooKeeper is a centra ...
- CSS(五)
定位 关于定位 我们可以使用css的position属性来设置元素的定位类型,postion的设置项如下: relative 生成相对定位元素,元素所占据的文档流的位置不变,元素本身相对文档流的位置进 ...
- 07-MYSQL多表查询
今日任务 完成对MYSQL数据库的多表查询及建表的操作 教学目标 掌握MYSQL中多表的创建及多表的查询 掌握MYSQL中的表关系分析并能正确建表 昨天内容回顾: 数据库的创建 : crea ...
- MongoDB_简介_安装_基本使用_js_mongoose 操作 MongoDB 编程
数据库 按照数据结构来组织.存储和管理数据的仓库 程序运行时,数据存储于内存中,一旦程序结束或者断电,就会数据丢失 为了将有些数据持久化存储到硬盘中,并确保可操作性和安全性,就需要数据库 分类: 关系 ...
- 170217、nginx 安装时候报错:make: *** No rule to make target `build', needed by `default'. Stop.
出现此种情况,是linux系统没有安装先决条件 1.GCC——GNU编译器集合(GCC可以使用默认包管理器的仓库(repositories)来安装,包管理器的选择依赖于你使用的Linux发布版本,包管 ...
- Linux下面使用命令如何运行.sh文件的两种解决办法
Linux下面用命令如何运行.sh文件的方法,有两种方法: 一.直接./加上文件名.sh,如运行hello.sh为./hello.sh[hello.sh必须有x权限] 二.直接sh 加上文件名.sh, ...
- 深入理解iostat
前言 iostat算是比较重要的查看块设备运行状态的工具,相信大多数使用Linux的同学都用过这个工具,或者听说过这个工具.但是对于这个工具,引起的误解也是最多的,大多数人对这个工具处于朦朦胧胧的状态 ...