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. iOS7 断了统计和追踪用户的后路

    评论里大家都认可用identifierForVendor 然后用keychain和iCloud各保存一份. 看来这是接近最终结果的办法了. 官方文档又说了下面的话, 又有点费解. 我们只要把最后一组s ...

  2. sip会话流程以及sip介绍(2)

    下面我们通过一个简单的场景例子来简单介绍一下 SIP 会话流程. Tom 和 Jerry 是非常好的伙伴,Tom 在他的 PC 上使用一个 SIP 的应用程序呼叫 Internet 上另一个 SIP ...

  3. 如何提高Axure设计的效率 提高Axure设计效率的10条建议

    如何更有效率的使用axure,这是新手需要掌握的技能.本文作者从实际经验中归纳出来的十条建议十分值得学习,转载分享给大家: Axure 是创建软件原型的快速有力的工具.上手很容易,但是,其中存在一个危 ...

  4. <随便写>WIN10家庭版调出策略组

    1.管理员运行cmd文件 2.运行窗口输入gpedit.msc 运行结果:

  5. windows 服务下搭建jsp运行环境

    此处搭建的是运行环境,不是开发环境. 1, 下载sdk 并安装  1.8      http://rj.baidu.com/soft/detail/14459.html?ald 2, 配置环境变量 步 ...

  6. Python中的sort()

    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一.基本形式列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可 ...

  7. 微信回调校验失败兼容php7

    今天在移动微信支付的代码的时候,发现校验失败,之前好好的,一点点打印了,顺着微信校验程序打印看结果,发现  $xml = $GLOBALS['HTTP_RAW_POST_DATA'];; 接收到的数据 ...

  8. java虚拟机(十四)--字节码指令

    字节码指令其实是很重要的,在之前学习String等内容,深入到字节码层面很容易找到答案,而不是只是在网上寻找答案,还有可能是错误的. PS:本文基于jdk1.8 首先写个简单的类: public cl ...

  9. Ionic 列表、文本 自动 换行

    1.采用row 布局的row-warp 来处理 <div class="item item-icon-right"> <span>图片相册</span ...

  10. python 3.6 关于python的介绍

    python的官方网站 https://www.python.org/ python 3.6 的官方网站的下载地址 https://www.python.org/downloads/release/p ...