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. 开源的DirectUI界面开发库DUILIB试用demo (Win32程序)

    Demo 第三版源码VC2005工程(附全部.h,ansi/unicode lib,dll),下载地址:http://goo.gl/c0L7Q   开源项目地址:http://code.google. ...

  2. express 4 使用session和cookies

    https://my.oschina.net/u/1466553/blog/294336 http://blog.csdn.net/liyi109030/article/details/3527138 ...

  3. Autowire(自动装配)机制

    为什么Spring要支持Autowire(自动装配) 先写几个类,首先定义一个Animal接口表示动物: 1 public interface Animal { 2 3 public void eat ...

  4. layui -关闭窗口方法

    1.关闭当前窗口 var index=parent.layer.getFrameIndex(window.name); //获取当前窗口的nameparent.layer.close(index); ...

  5. C# GDI+编程(二)

    常用的绘图函数 DrawArc绘制一个弧形 示例:graphics.DrawArc(pen,,,,,,) 倒数第二个参数,表示起始度数,最后一个参数是弧形的跨越度数.比如起始度数是90,跨越度数是12 ...

  6. VC窗体透明而控件不透明以及Static文本背景透明方法

    出自http://my.oschina.net/ypimgt/blog/60951 优点:    1.Dialog 窗体完全透明.     2. 窗体上的控件不透明. DC 绘制的图形不透明.     ...

  7. filterBuilders 构建过滤器query

    FilterBuilders构建过滤器Query package com.elasticsearch; import org.elasticsearch.action.ActionListener; ...

  8. .Net Email操作类

    using System; using System.Text; using System.Net.Mail; using System.Net; using System.Linq; using S ...

  9. bootstrap字体图标在IE上不显示

    最简单的办法就是直接下载最新的bootstrap.css替换掉旧的. 但是由于我做的项目直接替换会出现样式冲突问题,因此只好慢慢找是什么属性导致图标不显示,最后找到了解决办法: 1.首先保字体文件的位 ...

  10. vim中利用swp文件进行恢复

    经常电脑因为没电或者强行关闭vim,会导致原文件没有保存, 这种情况下vim会自动保存一个.swp文件,需要恢复时, 使用vim -r filename 期中-r意思为recovery 恢复之后最好删 ...