import java.math.BigDecimal;
public class ConvertNum {
/** 定义数组存放数字对应的大写 */
private final static String[] STR_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
/** 定义数组存放位数的大写 */
private final static String[] STR_MODIFY = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟" };
/**
* 转化整数部分
*
* @param tempString
* @return 返回整数部分
*/
private static String getInteger(String tempString) {
/** 用来保存整数部分数字串 */
String strInteger = null;//
/** 记录"."所在位置 */
int intDotPos = tempString.indexOf(".");
int intSignPos = tempString.indexOf("-");
if (intDotPos == -1)
intDotPos = tempString.length();
/** 取出整数部分 */
strInteger = tempString.substring(intSignPos + 1, intDotPos);
strInteger = new StringBuffer(strInteger).reverse().toString();
StringBuffer sbResult = new StringBuffer();
for (int i = 0; i < strInteger.length(); i++) {
sbResult.append(STR_MODIFY[i]);
sbResult.append(STR_NUMBER[strInteger.charAt(i) - 48]);
}
sbResult = sbResult.reverse();
replace(sbResult, "零拾", "零");
replace(sbResult, "零佰", "零");
replace(sbResult, "零仟", "零");
replace(sbResult, "零万", "万");
replace(sbResult, "零亿", "亿");
replace(sbResult, "零零", "零");
replace(sbResult, "零零零", "零");
/** 这两句不能颠倒顺序 */
replace(sbResult, "零零零零万", "");
replace(sbResult, "零零零零", "");
/** 这样读起来更习惯. */
replace(sbResult, "壹拾亿", "拾亿");
replace(sbResult, "壹拾万", "拾万");
/** 删除个位上的零 */
if (sbResult.charAt(sbResult.length() - 1) == '零' && sbResult.length() != 1)
sbResult.deleteCharAt(sbResult.length() - 1);
if (strInteger.length() == 2) {
replace(sbResult, "壹拾", "拾");
}
/** 将结果反转回来. */
return sbResult.toString()+"元";
}
/**
* 转化小数部分,保留两位小数 例:输入22.34返回叁肆
*
* @param tempString
* @return
*/
private static String getFraction(String tempString) {
String strFraction = null;
int intDotPos = tempString.indexOf(".");
/** 没有点说明没有小数,直接返回 */
if (intDotPos == -1)
return "";
strFraction = tempString.substring(intDotPos + 1,intDotPos+3);
StringBuffer sbResult = new StringBuffer(strFraction.length());
for (int i = 0; i < strFraction.length(); i++) {
if(i==0){
sbResult.append(STR_NUMBER[strFraction.charAt(i) - 48]+"角");
}else {
sbResult.append(STR_NUMBER[strFraction.charAt(i) - 48]+"分");
}
}
return sbResult.toString();
}
/**
* 将一个数字转化为金额
*
* @param tempNumber 传入一个double的变量
* @return 返一个转换好的字符串
*/
public static String numberToChinese(double tempNumber) {
java.text.DecimalFormat df = new java.text.DecimalFormat("#.#########");
String pTemp = String.valueOf(df.format(tempNumber));
StringBuffer sbResult = new StringBuffer(getInteger(pTemp) + getFraction(pTemp));
return sbResult.toString();
}
public static String numberToChinese(BigDecimal tempNumber) {
return numberToChinese(tempNumber.doubleValue());
}
/**
* 替代字符
*
* @param pValue
* @param pSource
* @param pDest
*/
private static void replace(StringBuffer pValue, String pSource, String pDest) {
if (pValue == null || pSource == null || pDest == null)
return;
/** 记录pSource在pValue中的位置 */
int intPos = 0;
do {
intPos = pValue.toString().indexOf(pSource);
/** 没有找到pSource */
if (intPos == -1)
break;
pValue.delete(intPos, intPos + pSource.length());
pValue.insert(intPos, pDest);
} while (true);
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(numberToChinese(3012.234));
}
}
分享到:
相关推荐
在IT领域,尤其是在编程实践中,将浮点数转换为人民币读法是一项常见的需求。这涉及到数值处理、格式化以及本地化等技术。《疯狂Java讲义》是一本深入讲解Java编程的经典教材,其中涵盖了许多实战性的编程问题。在这...
实现把不超过12位整数的浮点数转换为中文读法的字符串并保留两位小数
这个“把数学数字转换为人民币读法”的问题就是一个很好的设计思想的例子,它涉及到自然语言处理、字符串操作以及数字与文本之间的转换。我们将探讨如何使用C#来实现这个功能。 首先,人民币的读法有一定的规则,如...
将浮点数转化为人民币读法的字符串。如1006.333转为壹仟零陆元三角三分。
在编程领域,尤其是在Java开发中,有时我们需要将数字转换成中文读法,以便于用户更加直观地理解数据。这个需求通常出现在财务、报表或者人机交互界面等场景。标题所提及的问题是:“Java设计输入‘12345’显示‘一...
题目:输入一串数字,转成人民币读法输出 例: 输入:12345678.908 输出:壹仟贰佰叁拾肆万伍仟陆佰柒拾捌元玖角零捌厘 实现该功能要解决如下几个问题: 1、输入有效性检查 2、数字转中文 3、零的特殊处理 关于零...
把小写的人民币读法转为大写读法的方法。
人民币数字大写转换软件是一个将数字转换为大写人民币的工具,用户可以输入数字,然后软件将其转换为大写人民币。该软件具有以下功能: * 将数字转换为大写人民币 * 支持多种数字格式的输入 * 可以根据用户的需求...
在IT行业中,尤其是在软件开发领域,经常会遇到将数字金额转换为汉字表示的需求,这在财务系统、报表或者用户界面中尤为常见。这个需求涉及到的是数字处理和字符串操作的知识点,通常可以通过编程语言来实现。本例中...
课后习题 欢迎下载 还是比较完善的
在编程领域,尤其是在Java开发中,有时我们需要将阿拉伯数字(1, 2, 3等)转换为中文的传统读法(如“一”,“二”,“三”)。这个任务涉及到字符串处理、数字转换以及对中文字符的理解。在本文中,我们将深入探讨...
在本项目中,"PB数字人民币金额发音程序(源码)"是一个利用PowerBuilder编写的程序,其主要功能是将输入的数字转换为对应的中文人民币金额读法,精确到角分。这个程序对于财务系统、银行应用或者任何需要语音播报...
2. **“人民币”标识**:转换结果需包含“人民币”字样,且“分”后不加“整”或“正”。 3. **格式紧密无空格**:大写金额紧随“人民币”字样,避免出现空格。 4. **零的特殊处理**:小写数字中的“0”需根据汉语...
根据给定文件的信息,本文将详细介绍在数字运算中数符的各种英文读法,这对于从事数学英语教学的朋友来说具有很高的参考价值。以下是对该文件中提到的关键知识点进行详细解读。 ### 数学英语读法概述 首先,文件...
包括拼音,简繁转换,数字读法,货币读法。 安装 通过Nuget使用.NET CLI安装: dotnet add package Chinese 版本更新 v0.3.5 : 可移除对Microsoft Visual Studio International Pack 1.0 Service的依赖; 拼音解析...
在工程科技文献中常见的数学符号的英文读法整理
在教育领域,尤其是在数学教学中,正确地读取多位...总的来说,"多位数读法歌"是教育领域中一种有效的教学策略,它将复杂的数学概念转化为易于理解的韵文,使学生在愉快的氛围中掌握读数技巧,对提升数学素养大有裨益。
在学习日语的过程中,了解数字的读法是基础且重要的环节。日语数字的读法在不同的上下文...同样的,表示时间的“分钟”在口语中有时会被简化为“ぷん”。通过不断地实践和听力训练,可以更好地理解和运用这些数字表达。
《数学符号读法大全》是一份详尽的数学符号指南,涵盖了从基础到高级的各种数学符号及其读音,对于数学研究者以及论文撰写者来说,是不可或缺的参考资料。以下是一些主要数学符号的解读和应用: 1. **等价符号**:`...
《变“讲课文”为“教读法”》这篇文章探讨了语文教学中从传统的“讲课文”模式转向“教读法”的重要性及其实施策略。文章指出,教学方法的改革对于教学内容有着深远影响,特别是在语文教学领域。自1978年以来,我国...