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);
StringBuffer sbResult = new StringBuffer(strFraction.length());
for (int i = 0; i < strFraction.length(); i++) {
sbResult.append(STR_NUMBER[strFraction.charAt(i) - 48]);
}
return sbResult.toString();
}
/**
* 判断传入的字符串中是否有.如果有则返回点
*
* @param tempString
* @return
*/
private static String getDot(String tempString) {
return tempString.indexOf(".") != -1 ? "点" : "";
}
/**
* 判断传入的字符串中是否有-如果有则返回负
*
* @param tempString
* @return
*/
private static String getSign(String tempString) {
return tempString.indexOf("-") != -1 ? "负" : "";
}
/**
* 将一个数字转化为金额
*
* @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(getSign(pTemp) + getInteger(pTemp) + getDot(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(1230400567.8934));
}
}
分享到:
相关推荐
labview IEE754浮点数转换程序,通过串口采集到的十六进制字符串转换成单精度的浮点数,浮点数转换成十六进制字符串
在C语言中,将浮点数转换为字符串是一项常见的任务,尤其在需要将数值数据输出到文件或屏幕上时。这个过程通常涉及到`printf`函数家族的使用,它们能够按照指定的格式将各种类型的数据转化为可读的字符串。本文将...
电子-浮点数转换成字符串.c,单片机/嵌入式STM32-F0/F1/F2
总的来说,将浮点数转换为人民币读法是一个涉及数值处理、字符串操作和格式化技术的综合性问题,通过这个实践可以加深对Java编程的理解,并提升编程技巧。在实际工作中,这样的转换可能还会涉及到多语言环境下的本地...
- 波形格式:在通信协议中,浮点数通常被转换为特定的字符串格式,例如科学记数法。 - 错误处理:考虑到可能出现的溢出、下溢、解析错误等情况,需要有相应的错误处理机制。 `float_2_char`的源代码应该包含了...
本文将深入探讨如何使用C#来实现单精度浮点数(Single)与16进制字符串的相互转换。 首先,我们需要了解浮点数在计算机中的存储方式。单精度浮点数(Single)在C#中占用4个字节(32位),按照IEEE 754标准,这32位...
在C语言中,将浮点数转换为字符串是一项基本任务,常常用于数据的输出和文件存储。本篇文章将深入探讨如何自己动手编写一个C语言函数,实现`float`类型的浮点数转换为字符串的功能。首先,我们需要理解浮点数在...
学习c过程中,编写的浮点数转成ASCII字符串的函数,包括源代码和测试程序,在gcc-3.4.5-20060117-3和VS2008下均编译通过,并运行结果正确。 如果你在测试的过程中发现输出结果不正确,欢迎跟我联系,以便进一步改进...
VBA实现单精度浮点数与十六进制字符串相互转换,并提供2个相互转换的示例 第一个按钮: "A1录入十六进制8位字符串; B1输出单精度浮点数结果" 第二个按钮 "将B1作为单精度浮点数输入 C1输出16进制结果
本文将深入探讨十六进制字符串与浮点数、整型之间的转换,并提供在Qt和VC2010环境下实现这些转换的源代码。 首先,我们要理解不同进制的概念。在计算机科学中,我们常用的是二进制、八进制、十进制和十六进制。十六...
浮点数转换为字符串是C语言编程中常见的一项任务,特别是在需要将计算结果输出到控制台或保存到文件时。这个过程涉及到C语言中的类型转换和格式化输出,主要使用了`printf`函数来实现。在C语言中,浮点数包括`float`...
在编程领域,浮点数和字符串之间的转换是常见的操作,特别是在数据处理、用户输入输出以及文件存储等场景。本文将详细讲解如何使用C语言实现浮点数与字符串之间的转换,以满足标题和描述中提到的需求。 首先,让...
该项目包含使用最短,固定的%f和科学的%e格式将IEEE-754浮点数转换为十进制字符串的例程。 主要的实现是在C中进行的,并且到Java的转换最短。 所有算法均已在同行评审的出版物中发表。 在撰写本文时,这些是已知最...
该方法通过对IEEE 754标准下的浮点数编码规则进行硬解码,进而实现浮点数到字符串的转换。尽管这种方法在效率上不及其他常规手段,但在精度方面具有显著优势,并且其清晰的实现思路对于深入理解浮点数的工作原理非常...
在Delphi编程环境中,将浮点数转换为字符串是一个常见的任务,这涉及到数值类型与文本之间的数据转换。本文将深入探讨Delphi中如何实现这一操作,以及相关的重要知识点。 首先,Delphi是一种基于Pascal语言的开发...
当你需要将一个浮点数转换为人类可读的字符串时,可以使用LabVIEW的“数字符串转换”函数,它能将数值转换为各种格式的字符串,包括科学记数法、固定小数点等。在2017版本中,这一功能更为完善,支持自定义转换参数...
### double浮点数转换成字符串源码解析 #### 概述 在计算机编程领域,将浮点数(如`double`类型)转换为字符串是一项常见的需求。这种转换通常用于输出结果、日志记录或者与其他非数值处理系统进行交互。本文将...
在LabVIEW编程环境中,字符串转换是一项基础且重要的任务。标题提到的"ASCII转换至十六进制字符串与二进制字符串显示"是指将ASCII编码的字符转换为对应的十六进制和二进制表示形式,并在LabVIEW界面上进行展示。下面...
例如,在全局 DB 中创建四个变量,用来保存数据,然后在 OB1 中调用 STRG_VAL 指令,并连接参数,选择字符串的数据类型和浮点数的数据类型,将需要转换的字符串在输出参数 OUT 中作为浮点数输出。 * VAL_STRG 指令:...
本VI实现十进制字符串强制转换为16进制字符串,即输入10进制的0CDA可输出16进制的0CDA