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. LUOGU P4163 [SCOI2007]排列

    传送门 解题思路 首先我们发现这道题s的长度很小,所以考虑点暴力的做法,状压dp或搜索.本蒟蒻搜索永远调不对,所以就写了个状压dp.因为所有s里的数都要出现一次,并且最后的答案是要求整除,那么我们设d ...

  2. Zuul微服务网关

    Zuul简介:         Zuul是Netflix开源的微服务网关,它可以和Eureka.Ribbon.Hystrix等组件配合使用.Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能 ...

  3. 元素显示v-show

    <!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...

  4. 《DSP using MATLAB》Problem 8.32

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  5. Java学习之一(引用相关)

    1.Java概述 首先,Java是一门面向对象的编程语言.相对于C/C++等语言,Java中没有指针,但是这不代表指针等知识不重要:Java中不存在多继承但是存在多接口.在我自己的学习过程之中,我偏向 ...

  6. Spring Boot配置公共的线程池

    内存资源很宝贵,线程池资源不宜过多的创建,同一个应用,尽量使用统一的线程池,并且相关参数需要设置适当,不造成资源的浪费,也不影响性能的提升. import java.util.concurrent.T ...

  7. Jmeter安装与配置(第一篇)

    Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试静态和动态资源,例如静态文 ...

  8. css 背景图居中

    参考:http://www.php.cn/css-tutorial-411901.html position : 50% ;或position : center;

  9. 解决使用mybatis模糊查询为空的问题

    解决方法: 在数据库配置的url后添加?useUnicode=true&characterEncoding=utf-8 参考: https://blog.csdn.net/IT_private ...

  10. 深度残差网络——ResNet学习笔记

    深度残差网络—ResNet总结 写于:2019.03.15—大连理工大学 论文名称:Deep Residual Learning for Image Recognition 作者:微软亚洲研究院的何凯 ...