package com.example.convert; import java.text.DecimalFormat;
import java.util.Scanner; /**
* 金额转换
*
* @author Administrator
*/
public class ConvertMoney { // 大写数字
private final static String[] STR_NUMBER = {"零", "壹", "贰", "叁", "肆", "伍",
"陆", "柒", "捌", "玖"};
// 整数单位
private final static String[] STR_UNIT = {"", "拾", "佰", "仟", "万", "拾", "佰",
"仟", "亿", "拾", "佰", "仟"};
// 小数单位
private final static String[] STR_UNIT2 = {"厘", "分", "角"}; /**
* 程序入口
* @param args
*/
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
System.out.println("请输入金额:");
// 获取金额转换后的字符串
String convert = ConvertMoney.convert(scan.nextDouble());
// 输出转换结果
System.out.println(convert);
} /**
* 获取整数部分
*
* @param num
* 金额
* @return 金额整数部分
*/
public static String getInteger(String num) {
// 判断是否包含小数点
if (num.indexOf(".") != -1) {
num = num.substring(0, num.indexOf("."));
}
// 反转字符串
num = new StringBuffer(num).reverse().toString();
// 创建一个StringBuffer对象
StringBuffer temp = new StringBuffer();
for (int i = 0; i < num.length(); i++) {// 加入单位
temp.append(STR_UNIT[i]);
temp.append(STR_NUMBER[num.charAt(i) - 48]);
/*
* num.charAt(i)-48获取数值或者使用Integer.pa……
* ASCLL表中0的位置是48,比如得到的字符3,对应ASCLL值 是51,减去48才是这里要的值
*/
}
// 反转字符串
num = temp.reverse().toString();
// 替换字符串的字符
num = numReplace(num, "零拾", "零");
num = numReplace(num, "零佰", "零");
num = numReplace(num, "零仟", "零");
num = numReplace(num, "零万", "万");
num = numReplace(num, "零亿", "亿");
num = numReplace(num, "零零", "零");
num = numReplace(num, "亿万", "亿");
// 如果字符串以零结尾将其除去
if (num.lastIndexOf("零") == num.length() - 1) {
num = num.substring(0, num.length() - 1);
}
return num;
} /**
* 获取小数部分
*
* @param num
* 金额
* @return 金额的小数部分
*/
public static String getDecimal(String num) {
// 判断是否包含小数点
if (num.indexOf(".") == -1) {
return "";
}
num = num.substring(num.indexOf(".") + 1);
// 反转字符串
num = new StringBuffer(num).reverse().toString();
// 创建一个StringBuffer对象
StringBuffer temp = new StringBuffer();
// 加入单位
for (int i = 0; i < num.length(); i++) {
if (num.length() == 1) {
temp.append(STR_UNIT2[i + 2]);
temp.append(STR_NUMBER[num.charAt(i) - 48]);
} else if (num.length() == 2) {
temp.append(STR_UNIT2[i + 1]);
temp.append(STR_NUMBER[num.charAt(i) - 48]);
} else if (num.length() >= 3) {
temp.append(STR_UNIT2[i]);
temp.append(STR_NUMBER[num.charAt(i) - 48]);
}
}
// 反转字符串
num = temp.reverse().toString();
// 替换字符串的字符
num = numReplace(num, "零角", "零");
num = numReplace(num, "零分", "零");
num = numReplace(num, "零厘", "零");
num = numReplace(num, "零零", "零"); // 如果字符串以零结尾将其除去
if (num.lastIndexOf("零") == num.length() - 1) {
num = num.substring(0, num.length() - 1);
}
return num;
} /**
* 替换字符串中内容
*
* @param num
* 字符串
* @param oldStr
* 被替换内容
* @param newStr
* 新内容
* @return 替换后的字符串
*/
public static String numReplace(String num, String oldStr, String newStr) {
while (true) {
// 判断字符串中是否包含指定字符
if (num.indexOf(oldStr) == -1) {
break;
}
// 替换字符串
num = num.replaceAll(oldStr, newStr);
}
// 返回替换后的字符串
return num;
} /**
* 金额转换
*
* @param d
* 金额
* @return 转换成大写的全额
*/
public static String convert(double d) {
// 实例化DecimalFormat对象
DecimalFormat df = new DecimalFormat("#0.###");
// 格式化double数字
String strNum = df.format(d);
// 判断是否包含小数点
if (strNum.indexOf(".") != -1) {
String num = strNum.substring(0, strNum.indexOf("."));
// 整数部分大于12不能转换
if (num.length() > 12) {
System.out.println("数字太大,不能完成转换!");
return "";
}
}
String point = "";// 小数点
if (strNum.indexOf(".") != -1) {
point = "元";
} else {
if (strNum.length() > 12) {
System.out.println("数字太大,不能完成转换!");
return "";
}
point = "元整";
}
// 转换结果
String result = getInteger(strNum) + point + getDecimal(strNum);
if (result.startsWith("元")) { // 判断是字符串是否已"元"结尾
// 截取字符串
result = result.substring(1, result.length());
}
// 返回新的字符串
return result;
}
}

java数字金额转中文大写的更多相关文章

  1. java 数字金额转换中文金额

    public static String digitUppercase(double n){ String fraction[] = {"角", "分"}; S ...

  2. 【转载】C#工具类:人民币金额转换为中文大写

    在涉及到金融业务这一块的系统设计中,时常能够遇到的情况是需要将阿拉伯数字的人民币金额自动转换为中文的大写金额.现在互联网上也有很多网站提供此类服务,只要你输入人民币的阿拉伯数字金额,输入后自动给你转换 ...

  3. C#小写数字金额转换成大写人民币金额的算法

    C#小写数字金额转换成大写人民币金额的算法 第一种方法: using System.Text.RegularExpressions;//首先引入命名空间 private string DaXie(st ...

  4. C# 金额转中文大写

    今天看到一个库是把金额转中文大写,看起来很容易,所以我就自己写了 创建的项目是创建一个 dot net core 的项目,实际上这个项目可以创建为 Stand 的. 首先创建类,这个类的构造传入一个 ...

  5. js 将数字转换成中文大写

    //完成将 toChineseNum, 可以将数字转换成中文大写的表示,处理到万级别,例如 toChineseNum(12345),返回 一万二千三百四十五. const toChinesNum = ...

  6. Sql Server 数字金额转中文金额 函数

    在做一些订单金额.合同金额转换的时候,经常会遇到数字转成中文的情况,所以整理了一个数字转中文的函数: /* 说明:数字金额转中文金额 示例:187.4 转成 壹佰捌拾柒圆肆角整 */ ,)) ) BE ...

  7. 2018-4-29-C#-金额转中文大写

    title author date CreateTime categories C# 金额转中文大写 lindexi 2018-04-29 09:50:38 +0800 2018-04-02 21:4 ...

  8. java数字金额转化为中文金额

    public static String digitUppercase(double n){String fraction[] = {"角", "分"};Str ...

  9. vue filters 金额转中文大写

    capitalAmount(amount: any) {             // 汉字的数字             const cnNums = ["零", "壹 ...

随机推荐

  1. JVM的内存空间

    一.JVM运行起来,就会给内存划分空间,这块空间成为运行时数据区.运行时数据区主要划分为以下几部分内容: 1.栈 每一个线程运行起来的都会对应一个栈(线程栈),栈中的数据是该线程独有的,不会产生资源共 ...

  2. linux系统添加定时任务

    http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html

  3. webpack打包指定HTML的文件并引入指定的chunks

    1. 安装 html-webpack-plugin npm install html-webpack-plugin --save-dev 2. 在webpack.config.js中配置 const ...

  4. mysql列属性操作(转载)

    1.mysql中修改字段长度: ALTER TABLE tb_article MODIFY COLUMN NAME VARCHAR(50); 这里的tb_article为表名,NAME为字段名,50为 ...

  5. 洛谷P5104 红包发红包

    题目链接: P5104 题目分析: 题目和\(n\)是没什么关系的,因为是\(n\)个人抢,其实不一定抢完 其实很显然--就是求一个连续型随机变量的期望 首先设一个随机变量\(X\),表示第一个人拿到 ...

  6. bean的使用

    前言 Spring最基础的功能就是一个bean工厂,所以本文讲解的是Spring生成bean的种种方法及细节,Spring配置文件的名字是bean.xml,定义几个类: 一个Person类: publ ...

  7. 09.Hibernate中的事务与并发

    事务1. 什么是事务 * 事务就是逻辑上的一组操作,组成事务的各个执行单元,操作要么全都成功,要么全都失败. * 转账的例子:冠希给美美转钱,扣钱,加钱.两个操作组成了一个事情! 2. 事务的特性 * ...

  8. html常用标签详解3-a标签

    a标签 1.a标签的属性 a标签属于行内元素标签,双标签<a></a> href:a标签的跳转地址 target:打开方式(_self自身:_blank:新窗口) title: ...

  9. 【linux之路】常用的命令

    用bash插入代码 1.查看ubuntu的版本号 lsb_release –a //linux标准基础(Linux Standards Base):release发布 2.查看Ubuntu的内核 un ...

  10. html2canvas JS截图插件

    github/download:https://github.com/niklasvh/html2canvas/releases 参考文章:基于html2canvas实现网页保存为图片及图片清晰度优化 ...