在处理财务账款时,需要将转账金额写成大写的。也就是说,如果要转账123456.00元,则需要写成“壹拾贰万叁仟肆佰伍拾陆元整”。
所以常常需要通过程序控制自动进行转换。本实例实现了小写金额到大写金额的转换。

具体代码如下:

import java.text.DecimalFormat;
import java.util.*;
//@北冥道人骑鲲打代码
public class f2 {
private static String[] numBig = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
private static String[] numInt = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟" };// 整数单位
private static String[] numFloat = { "厘", "分", "角" };// 小数单位 public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入金额");
double money = input.nextDouble(); //格式化double数字
DecimalFormat df = new DecimalFormat("#0.###");//此时strNum小数位最多3位
String strNum = df.format(money);
if (strNum.indexOf(".") > 0 ) {//判断是否有小数
String strMoneyInt = strNum.substring(0, strNum.indexOf("."));
if(strMoneyInt.length() > 12){
System.out.println("数字太大了,转换不了");
}else{
System.out.println(getInt(strNum) + "元" + getDouble(strNum));
}
}
else{
if(strNum.length() > 12){
System.out.println("数字太大了,转换不了");
}else{
System.out.println(getInt(strNum) + "元整");
}
}
} //整数部分
public static String getInt(String str) {
if(str.indexOf(".") != -1){
str = str.substring(0,str.indexOf("."));//截取小数点前面的数字
}
str = new StringBuffer(str).reverse().toString();//反转字符串
StringBuffer strB = new StringBuffer(); //创建一个空的StringBuffer对象
for (int i = 0; i < str.length(); i++){ //把单位添加进去
strB.append(numInt[i]);
strB.append(numBig[(str.charAt(i)-48)]);
//str.charAt(i)-48,这里-48是因为str.charAt(i)-48为ASCII码
//而参照ASCII码:
//ASCII码为 48 ==》0
//ASCII码为 49 ==》1 ...
}
str = strB.reverse().toString();//把反转过的字符串还原 //替换字符串多于的字符
if (str.indexOf("零拾") != -1){str = str.replace( "零拾", "零");}
if (str.indexOf("零佰") != -1){str = str.replace( "零拾", "零");}
if (str.indexOf("零仟") != -1){str = str.replace( "零拾", "零");}
if (str.indexOf("零万") != -1){str = str.replace( "零拾", "万");}
if (str.indexOf("零亿") != -1){str = str.replace( "零拾", "亿");}
if (str.indexOf("零零") != -1){str = str.replace( "零拾", "零");}
if (str.indexOf("亿万") != -1){str = str.replace( "零拾", "亿");} //除去零的结尾
if (str.lastIndexOf("零") == str.length() - 1) {
str = str.substring(0, str.length() - 1);
}
return str;
} //小数部分
public static String getDouble(String str) {
str = str.substring(str.indexOf(".") + 1);//截取小数点后的数字 //解决单位错位
if(str.length() == 1){str = str +"00";}
else if(str.length() == 2){str = str +"0";} str = new StringBuffer(str).reverse().toString();//反转字符串
StringBuffer strB = new StringBuffer();//创建一个空的StringBuffer对象
for (int i = 0; i < str.length(); i++) {//把单位添加进去
strB.append(numFloat[i]);
strB.append(numBig[str.charAt(i) - 48]);
}
str = strB.reverse().toString();//把反转过的字符串还原 //替换字符串多于的字符
if (str.indexOf("零角") != -1){str = str.replace( "零角", "零");}
if (str.indexOf("零分") != -1){str = str.replace( "零分", "零");}
if (str.indexOf("零厘") != -1){str = str.replace( "零厘", "零");}
if (str.indexOf("零零") != -1){str = str.replace( "零零", "零");} //除去零的结尾
if (str.lastIndexOf("零") == str.length() - 1) {
str = str.substring(0, str.length() - 1);
}
return str;
}
}

运行截图:

java程序:转化金额的更多相关文章

  1. Java初学者作业——编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额。

    返回本章节 返回作业目录 需求说明: 编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额. 购买总金额达到或超过 1000元,按 8折优惠,送 200元的购物券: ...

  2. 编写高质量代码:改善Java程序的151个建议(第二章:基本类型)

    编写高质量代码:改善Java程序的151个建议(第二章:基本类型) 目录 建议21:用偶判断,不用奇判断 建议22:用整数类型处理货币 建议23:不要让类型默默转换 建议24:边界还是边界 建议25: ...

  3. 2017年 Java 程序员,风光背后的危机

    不得不承认,经历过行业的飞速发展期,互联网的整体发展趋于平稳.为什么这么说?为什么要放在 Java 程序员的盘点下说? 的确,对于进可攻前端,后可守后端大本营的 Java 程序员而言,虽然供应逐年上涨 ...

  4. 编写高质量代码:改善Java程序的建议

    建议的采用顺序是List<T>.List<?>.List<Object> List<T>.List<?>.List<Object> ...

  5. Java程序员学习之路

    1. Java语言基础 谈到Java语 言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基 ...

  6. Java中基本数据类型的存储方式和相关内存的处理方式(java程序员必读经典)

    1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对 ...

  7. Java程序版权保护解决方案

    通常C.C++等编程语言开发的程序都被编译成目标代码,这些目标代码都是本机器的二进制可执行代码.通常所有的源文件被编译.链接成一个可执行文件.在这些可执行文件中,编译器删除了程序中的变量名称.方法名称 ...

  8. 利用IKVM在C#中调Java程序

    原文转自:http://luanxiyuan.iteye.com/blog/1937081 IKVM.NET是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java ...

  9. Java程序员面试题集(71-85)(转)

    转:http://blog.csdn.net/jackfrued/article/details/17566627 Java程序员面试题集(71-85) 摘要:这一部分主要包括了UML(统一建模语言) ...

  10. java程序的工作原理

    Sun公司设计java语言的目标是让Java程序不必经过修改就可以在各种各样的计算机(包括PC机和工作站)上运行.为了实现这一目标,Sun公司提供了一阵Java虚拟机(Java Virtual Mac ...

随机推荐

  1. javascript设计模式--策略模式

    javascript策略模式总结 1.什么是策略模式? 策略模式的定义是:定义一系列的算法,把他们独立封装起来,并且可以相互替换. 例如我们需要写一段代码来计算员工的奖金.当绩效为a时,奖金为工资的5 ...

  2. idea创建简单web项目分析Servlet的请求转发与重定向的区别

     注:如需转载,请附上原文链接,如有建议或意见,欢迎批评指正! 需求说明: // index.jsp页面 1 <% 2 String basePath = request.getScheme() ...

  3. git版本回退问题记录

    因为之前有个前端改了文件目录进行合并时候丢失掉些许代码,然后我在以前分支进行了代码层级的整理,项目如果想要启动还需还原回以前的版本,我进行了三次文件夹层级提交,所以我需要进行三次的版本回退. git命 ...

  4. java输入输出流操作同一资源实现覆盖引发冲突的解析

    一.问题发生的场景 题目:把s.txt中大写转成小写,小写转成大写,空格转成下划线,在输入到文件中覆盖之前的 前面的没有问题,问题出现在后面的覆盖文件上,输入流.输出流要操作同一个文件的问题 二.小白 ...

  5. XiaoQi.Study 项目(三)

    一.配置跨域 1.首先注册跨域要求 ,(可访问的IP.端口) //注册跨域 services.AddCors(options => { options.AddPolicy("XiaoQ ...

  6. java web 中base64传输的坑

    今天在项目中,前端需要向后端发送一张图片,使用toDataURL方法以base64编码的形式传输,在写好程序后,发现报错为base64不是有效的图片,反复排查后发现接口需要一张格式为png的图片,在前 ...

  7. java 知识点总结(转)

    转载自 https://www.cnblogs.com/wl310538259/p/5218251.html (一)Java 1.接口和抽象类的区别 ①抽象类里可以有构造方法,而接口内不能有构造方法. ...

  8. 有关EPX Studio使用DELPHI5作为基础环境版本的说明

    英巴卡迪诺北京科技有限公司,地址是北京市朝阳门外大街18号丰联广场B座813B,这家公司这家公司不拥有:delphi 1.0~delphi7.0 .delphi 2005版本的著作权,这些都还是属于B ...

  9. wpf xaml CS0426 错误原因

    wpf  程序集中 类命名空间名称和类名不能相同,否则在 xaml生成 i.g.cs时,会导致 自动生成代码无法推到处是类型还是命名空间的问题.   触发这个错误的条件是类命名空间 与 类名相同 并 ...

  10. c# winform 访问WebServices 服务(通过WEB引用的方式进行访问)

    第一步.Winform项目引用WEB服务 第二步.代码声明实例化 Web引用 YzServ.TestServ yzserv = new WebYzServ.TestServ(); yzserv.AAA ...