金额转换java_java金额数字转中文工具类详解

该博客介绍了一个Java工具类,用于将阿拉伯数字的金额转换为中文汉字表示,支持小数点后两位四舍五入。文章详细展示了代码实现,并提供了多个测试用例。转换过程中考虑了负数、零、分、角等不同情况,确保转换准确无误。
摘要由CSDN通过智能技术生成

本文实例为大家分享了java金额数字转中文工具类的具体代码,供大家参考,具体内容如下

java金额数字转中文工具类ConvertNum.java

package light.mvc.utils;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

/**

* 金额数字转中文工具类

*

* @author ardo

*

*/

public class ConvertNum {

/**

* 把金额阿拉伯数字转换为汉字表示,小数点后四舍五入保留两位

* 还有一种方法可以在转换的过程中不考虑连续0的情况,然后对最终的结果进行一次遍历合并连续的零

*/

public static String[] ChineseNum = new String[] { "零", "壹", "贰", "叁", "肆",

"伍", "陆", "柒", "捌", "玖" };

public static String NumToChinese(double num) {

if (num > 99999999999999.99 || num < -99999999999999.99)

throw new IllegalArgumentException(

"参数值超出允许范围 (-99999999999999.99 ~ 99999999999999.99)!");

boolean negative = false;// 正负标号

if (num < 0) {

negative = true;

num = num * (-1);

}

long temp = Math.round(num * 100);

int numFen = (int) (temp % 10);// 分

temp = temp / 10;

int numJiao = (int) (temp % 10);// 角

temp = temp / 10;

// 此时temp只包含整数部分

int[] parts = new int[20];// 将金额整数部分分为在0-9999之间数的各个部分

int numParts = 0;// 记录把原来金额整数部分分割为几个部分

for (int i = 0;; i++) {

if (temp == 0)

break;

int part = (int) (temp % 10000);

parts[i] = part;

temp = temp / 10000;

numParts++;

}

boolean beforeWanIsZero = true;// 标志位,记录万的下一级是否为0

String chineseStr = "";

for (int i = 0; i < numParts; i++) {

String partChinese = partConvert(parts[i]);

if (i % 2 == 0) {

if ("".equals(partChinese))

beforeWanIsZero = true;

else

beforeWanIsZero = false;

}

if (i != 0) {

if (i % 2 == 0)// 亿的部分

chineseStr = "亿" + chineseStr;

else {

if ("".equals(partChinese) && !beforeWanIsZero)// 如果“万”对应的

// part 为

// 0,而“万”下面一级不为

// 0,则不加“万”,而加“零”

chineseStr = "零" + chineseStr;

else {

if (parts[i - 1] < 1000 && parts[i - 1] > 0)// 如果万的部分不为0,而万前面的部分小于1000大于0,则万后面应该跟零

chineseStr = "零" + chineseStr;

chineseStr = "万" + chineseStr;

}

}

}

chineseStr = partChinese + chineseStr;

}

if ("".equals(chineseStr))// 整数部分为0,则表示为零元

chineseStr = ChineseNum[0];

else if (negative)// 整数部分部位0,但是为负数

chineseStr = "负" + chineseStr;

chineseStr = chineseStr + "元";

if (numFen == 0 && numJiao == 0) {

chineseStr = chineseStr + "整";

} else if (numFen == 0) {// 0分

chineseStr = chineseStr + ChineseNum[numJiao] + "角";

} else {

if (numJiao == 0)

chineseStr = chineseStr + "零" + ChineseNum[numFen] + "分";

else

chineseStr = chineseStr + ChineseNum[numJiao] + "角"

+ ChineseNum[numFen] + "分";

}

return chineseStr;

}

// 转换拆分后的每个部分,0-9999之间

public static String partConvert(int partNum) {

if (partNum < 0 || partNum > 10000) {

throw new IllegalArgumentException("参数必须是大于等于0或小于10000的整数");

}

String[] units = new String[] { "", "拾", "佰", "仟" };

int temp = partNum;

String partResult = new Integer(partNum).toString();

int partResultLength = partResult.length();

boolean lastIsZero = true;// 记录上一位是否为0

String chineseStr = "";

for (int i = 0; i < partResultLength; i++) {

if (temp == 0)// 高位无数字

break;

int digit = temp % 10;

if (digit == 0) {

if (!lastIsZero)// 如果前一个数字不是0则在当前汉字串前加零

chineseStr = "零" + chineseStr;

lastIsZero = true;

} else {

chineseStr = ChineseNum[digit] + units[i] + chineseStr;

lastIsZero = false;

}

temp = temp / 10;

}

return chineseStr;

}

public static void main(String args[]) {

double num = 0;

System.out.println("请输入金额数字,-1退出");

try {

BufferedReader br = new BufferedReader(new InputStreamReader(

System.in));

num = Double.parseDouble(br.readLine());

} catch (IOException e) {

System.out.println(e.toString());

}

while (num != -1) {

System.out.println(num + NumToChinese(num));

try {

BufferedReader br = new BufferedReader(new InputStreamReader(

System.in));

num = Double.parseDouble(br.readLine());

} catch (IOException e) {

System.out.println(e.toString());

}

}

System.out.println("其他测试:");

System.out.println("100120: " + NumToChinese(100120));

System.out.println("25000000000005.999: "

+ NumToChinese(25000000000005.999));

System.out.println("45689263.626: " + NumToChinese(45689263.626));

System.out.println("0.69457: " + NumToChinese(0.69457));

System.out.println("253.0: " + NumToChinese(253.0));

System.out.println("0: " + NumToChinese(0));

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值