`

数字与人民币转换 最早程序是用Delphi 写到 现在换成java 并加了读功能(代码没有贴出来)

阅读更多
/**
*
*/
package com.mjp.core.rmb;

/**
* @author mojianpo
*
*/
public class RmbUtil {

/**
* 将数字转换为对应的大写字母列如:0--零
*
* @param num
* @return
*/
private static char tochina(int num) {
char result = '零';
switch (num) {
case 0:
result = '零';
break;
case 1:
result = '壹';
break;
case 2:
result = '贰';
break;
case 3:
result = '叁';
break;
case 4:
result = '肆';
break;
case 5:
result = '伍';
break;
case 6:
result = '陆';
break;
case 7:
result = '柒';
break;
case 8:
result = '捌';
break;
case 9:
result = '玖';
break;

}
return result;
}

/**
* 将数字转换成大写人民币,如果不是数字,则返回零,其中最大数值999999999999.99,无负数,只保留到分上
*/
public static String numToRMB(String str) {
String result = "";
if (str.charAt(0) == '-') {
str = str.substring(1);
}
if (!isNumber(str)) {
return "零";
}
char[] strtmp = new char[30];
double temp = Double.parseDouble(str);
if (str.substring(str.indexOf(".") + 1).trim().length() < 3) {
temp = temp + 0.001;
}
// System.out.println(temp);
if (temp > 1000000000000.1 || temp < 0.00) {
return "零";
}
long re = (long) (temp * 100);
// System.out.println(re);
String zheng = (re % 10 == 0 && re % 100 == 0) ? "整" : "";
strtmp[1] = '零';
strtmp[2] = '仟';
strtmp[3] = '零';
strtmp[4] = '佰';
strtmp[5] = '零';
strtmp[6] = '拾';
strtmp[7] = '零';
strtmp[8] = '亿';
strtmp[9] = '零';
strtmp[10] = '仟';
strtmp[11] = '零';
strtmp[12] = '佰';
strtmp[13] = '零';
strtmp[14] = '拾';
strtmp[15] = '零';
strtmp[16] = '万';
strtmp[17] = '零';
strtmp[18] = '仟';
strtmp[19] = '零';
strtmp[20] = '佰';
strtmp[21] = '零';
strtmp[22] = '拾';
strtmp[23] = '零';
strtmp[24] = '元';
strtmp[25] = '零';
strtmp[26] = '角';
strtmp[27] = '零';
strtmp[28] = '分';
strtmp[29] = '整';
int i;
for (i = 1; i < 15; i++) {
if ((re % 10) != 0) {
strtmp[29 - i * 2] = tochina((int) (re % 10));
}
re = (long) (re / 10);
if (re == 0) {
break;
}
}
i = 29 - i * 2;
boolean flag = false;// 标志零
while (i < 29) {
if (strtmp[i] == '零') {
i++;
flag = true;
if (strtmp[i] == '万' || strtmp[i] == '圆' || strtmp[i] == '亿') {
result = result + strtmp[i];
if (result.indexOf("亿万") > -1) {
result = result.replaceAll("亿万", "亿");
}
}
} else {
if (flag == true) {
flag = false;
result = result + "零";
}
result = result + strtmp[i];
i++;
result = result + strtmp[i];
}
i++;
}
result = result + zheng;
return result;
}

/**
* 判断字符串是否是数字,(可以有符号,也可有且最多只有一个点)
*/
private static boolean isNumber(String s) {
s = s.trim();
boolean pointfirsttime = true;
boolean haveDigit = false;
int i = 0;
if (s == null || s.length() < 1) {
return false;
}
if (s.charAt(0) == '-') {
i++;
}
while (i < s.length()) {
if (!Character.isDigit(s.charAt(i))) {
if ('.' == s.charAt(i) && pointfirsttime) {
pointfirsttime = false;
} else {
return false;
}
} else {
haveDigit = true;
}
i++;
}
if (!haveDigit) {
return false;
}
return true;
}

/**
* 将大写人民币转换成数字
*/
public static String rmbToNUM(String str) {
double temp1, temp2;
double result = 0;
for (int i = 0; i < str.length(); i++) {
temp1 = toNumber(str.charAt(i));
if (temp1 == 0) {
continue;
}
temp2 = toNumber(str.charAt(++i));
if (temp2 == 100000000) {
result = result * temp2;
} else if (temp2 == 10000) {
result = ((long) (result / 100000000)) * 100000000
+ (((long) result) % 100000000) * temp2;
}
result = result + temp1 * temp2;
}
return String.valueOf(result);
}

/**
* 将大写字母转换成对应的数字
*/
private static double toNumber(char c) {
double temp = 0;
switch (c) {
case '零':
temp = 0;
break;
case '壹':
temp = 1;
break;
case '贰':
temp = 2;
break;
case '叁':
temp = 3;
break;
case '肆':
temp = 4;
break;
case '伍':
temp = 5;
break;
case '陆':
temp = 6;
break;
case '柒':
temp = 7;
break;
case '捌':
temp = 8;
break;
case '玖':
temp = 9;
break;
case '拾':
temp = 10;
break;
case '佰':
temp = 100;
break;
case '仟':
temp = 1000;
break;
case '万':
temp = 10000;
break;
case '亿':
temp = 100000000;
break;
case '整':
temp = 0;
break;
case '元':
temp = 1;
break;
case '角':
temp = 0.1;
break;
case '分':
temp = 0.01;
break;
}
return temp;
}

/**
* 测试方法是否正确
*/
public static void main(String[] arg) {
String temp = "121.00";
System.out.println(temp);
String re = RmbUtil.numToRMB(temp);
System.out.println(re);
re = RmbUtil.rmbToNUM(re);
System.out.println(re);
double dd = Double.parseDouble(re);
System.out.println(dd);
}
}
分享到:
评论

相关推荐

    Java2Pas(Java代码转换成Delphi代码)

    Java2Pas是一款强大的命令行工具,专为程序员设计,它能有效地将Java源代码(.java文件)转换成Delphi的Pascal源代码(.pas文件)。这一转换过程对于那些希望将现有的Java项目迁移到Delphi平台或者在两个平台之间...

    Delphi实现数字与汉字的转换

    本篇文章将详细讲解如何利用Delphi实现数字与汉字的转换,这对于开发涉及中文字符处理的应用程序,如财务系统、报表软件等具有重要意义。 在数字与汉字转换中,我们通常涉及到的是数字到汉字的大写数字转换,这是...

    delphi32位程序转换成64位程序攻略.mht

    delphi32位程序转换成64位程序攻略.mht

    人民币大小写转换,这是个delphi源代码..rar

    本主题涉及的是在Delphi中实现人民币大小写的转换功能。在金融和会计领域,正确地将数字金额转换为大写汉字是至关重要的,因为这有助于避免因数字输入错误而引发的财务纠纷。下面我们将深入探讨如何在Delphi中实现这...

    delphi(pas)转java

    了解Java性能调优技巧,如JVM参数调整、代码优化,以及使用Java的并发工具来提高程序效率。 总的来说,从Delphi转向Java涉及到语言特性的理解、代码结构的重构、库和API的替换,以及对新平台特性的掌握。这是一个...

    Delphi数字大小写转换程序实例.rar

    Delphi数字大小写转换程序实例,并附有语音报号程序,实例在Delphi7.0下可顺利编译。主要是针对人民币的数字大小写转换,将阿拉伯数字转换成大写,具体定义:const mnUnit:WideString ='分角元';  const ...

    delphi-C语言到Delphi的转换器-语言转换.zip

    标题中的“delphi-C语言到Delphi的转换器”指的是一个工具或程序,它能够帮助开发者将用C语言编写的代码转换成Delphi语言。在软件开发中,这样的转换可能出于多种原因,如项目迁移、利用Delphi的特定功能或者为了在...

    用delphi写的一个des的加密解密小程序,java写的des的一个类

    标题中的“用Delphi写的一个DES的加密解密小程序,Java写的DES的一个类”表明了这个压缩包包含两个部分:一个是使用Delphi编程语言编写的用于执行DES(Data Encryption Standard)加密和解密的小程序,另一个是用Java...

    Java2OP工具(Java代码转换成Object Pascal代码)

    Embarcadero官方下载文件,用于将Java代码转换成Object Pascal代码(Delphi代码),此工具为命令行工具。 目前Delphi XE7可以将jar包添加到android工程的library目录下,但需要将jar转换成.pas文件,然后添加到...

    输入数字转换为人民币大写,Delphi源代码.rar

    输入数字转换为人民币大写,Delphi源代码,代码里有个重要的转换单位,此单位共定义两个函数来实现数字金额的中文大写转化,此函数可支持12位整数。程序思路如下: 将小数点前的整数取出,算出整数长度,不足千亿时...

    Delphi jpg转换成pdf文件demo

    【Delphi jpg转换成pdf文件demo】是一个使用Delphi编程语言编写的示例程序,它演示了如何将JPEG图像文件转换为PDF文档。这个程序的核心是图像处理和PDF生成技术,对于那些想要在Delphi环境下处理图像并创建PDF文档的...

    Delphi.rar_AES_AES加密_delphi AES加密_delphi 加解密_java delphi aes

    本资源"Delphi.rar_AES_AES加密_delphi AES加密_delphi 加解密_java delphi aes"提供的是在Delphi编程环境中实现AES加密和解密的示例代码,其目标是与Java平台上的加解密过程保持兼容。 首先,让我们深入了解一下...

    delphi的简繁转换源程序

    标题中的"Delphi的简繁转换源程序"指的是使用Delphi编程语言编写的代码,用于实现汉字的简体到繁体的转换功能。在中文环境下,由于历史原因,简体字和繁体字并存,这使得在不同地区交流时可能会遇到文字显示问题。...

    数字转换成金额大写

    在IT行业中,尤其是在财务软件开发或者自动化报表系统中,经常需要将数字转换成中文大写的金额形式,以便符合中国的财务规范。"数字转换成金额大写"是一个常见的需求,特别是在Delphi这样的编程环境中。Delphi是一款...

    Delphi调用Java类和包源代码

    7. **性能优化**:虽然JNI提供了强大的互操作性,但其开销可能比直接使用Java或Delphi代码高。因此,在设计系统时,应考虑调用频率和性能要求,尽可能减少跨语言调用。 8. **调试和测试**:由于涉及到多个语言和...

    RFID读卡程序-桌面应用程序-Java-JNI调用Delphi版DLL

    在本项目中,我们关注的是一个基于桌面的应用程序,它利用Java语言来实现RFID读卡功能,并通过JNI(Java Native Interface)调用了Delphi编写的DLL(动态链接库)。 Java JNI是Java平台提供的一种原生接口,允许...

    Delphi 人民币大写转换及朗读工具(源代码)

    本项目“Delphi 人民币大写转换及朗读工具”是一个实用的软件示例,它结合了财务计算与语音合成技术,为用户提供便捷的人民币金额转换服务。 一、人民币大写转换 在财务工作中,人民币金额通常需要以大写形式表示...

    delphi10以上真正能用的金额大小写转换源码

    在提供的`delphi10以上真正能用的金额大小写转换源码.txt`文件中,我们可以期待找到实现上述功能的源代码。通过学习和理解这段代码,开发者不仅可以解决当前的问题,还能加深对Delphi语言特性和财务应用开发的理解。

    delphi阿拉伯数字转换成中文写法

    把阿拉伯数字转为汉字写法比如123456789转化为零壹贰叁肆伍陆柒捌玖,以及几百几千几万的数字都可以转化

Global site tag (gtag.js) - Google Analytics