package formatMoney;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class SimpleMoney {
private static final double MAXNUM = 99999999999d;
private static final String[] num = { "零", "壹", "贰", "叁", "肆", "伍", "陆",
"柒", "捌", "玖" };
private static final String[] uti = { "分", "角", "元", "十", "百", "千", "万",
"十", "百", "千", "亿" };
public static void main(String[] args) {
System.out.println(ToChineseMoney("999999999.99"));
}
public static String ToChineseMoney(String str) {
int inum = 0; // 用于记数,用来取单位
double ia = Math.ceil(Double.parseDouble(str) * 100); // 转换成整数,处理到小数点后面2位,用ceil进位,强制转换为int。
if(ia > MAXNUM){
return "数值过大,小数点前最大为9位(换成金额为亿)";
}
int ib = 0; // 保存每一位的数据
StringBuffer sb = new StringBuffer(""); // 保存转换后的中文金额
List<String> array = new ArrayList<String>(); // 保存转换后的中文金额
while (ia >= 1) { // 判断a是否还有位数
ib = (int)ia % 10; // 取出当前a的最后一位
if (ib == 0 && uti[inum] != "万" && uti[inum] != "元") {
array.add(num[ib]); // 当数值为零,并且单位不是万或元的时候只拼接数据
} else if(ib == 0 && (uti[inum] == "万" || uti[inum] == "元")){
array.add(uti[inum]);// 当数值为单位是万或元的时候只拼接单位
}else {
array.add(num[ib] + uti[inum]); // 拼接上数据和单位
}
inum++;
ia = ia / 10; // 去除a当前的最后一位
}
//对上面取得的数组取反,得到平常所说的金额顺序,从大到小
Collections.reverse(array);
for (Iterator<String> iter = array.iterator(); iter.hasNext();) {
sb.append(iter.next());
}
String temp = sb.toString();
temp = formatMonet(temp);
return temp;
}
//格式化
public static String formatMonet(String str) {
// 把零零替换掉。
while (str.indexOf("零零") != -1) {
str = str.replace("零零", "零");
}
// 判断最后一个分的值是否为0,如果是替换为整
if (str.charAt(str.length() - 1) == '零') {
str = str.substring(0, str.length() - 1) + "整";
}
return str;
}
}
其中有个小问题,当我是11个9,999999999.99时候打印出的结果是
玖亿玖千玖百玖十玖万玖千玖百玖十玖元柒角柒分
最后两位是7。。。
9个9及以下的时候正确。。。
分享到:
相关推荐
在 SimpleMoneyFormat 类中,我们使用 NumberFormat 对象来格式化人民币金额数字,并使用 HashMap chineseNumberMap 和 chineseMoneyPattern 来将数字转换成中文数字和人民币金额。 例如,数字 123456.78 将被转换...
其核心功能是将阿拉伯数字表示的金额转换成中文大写形式,以满足财务凭证、支票、合同等文档中的金额书写规范。下面将详细介绍实现这一功能所需的关键知识点和相关代码。 首先,我们需要定义一些基础数据。在Java...
在构造函数中,我们使用 `NumberFormat` 类来设置数字格式,并将其设置为不使用分组符。然后,我们创建了两个 `HashMap` 对象,`chineseNumberMap` 和 `chineseMoneyPattern`,用于存储中文数字和中文金额模式。 ...
在财务系统、银行应用或任何涉及金额显示的软件开发中,将数字金额转换成中文大写是常见需求。例如,将“1234.56”转换为“壹仟贰佰叁拾肆元伍角陆分”。这种转换在合同、发票和其他正式文档中尤为常见,以防止金额...
这段代码是用于将数字转换为中文大写的人民币表示方式,主要应用于财务软件或者与货币相关的程序中,方便在中文环境中准确地表示金额。这个函数名为`GetChinaNum`,接收4个参数:`otherNum`、`isRMB`、`numOption`和...
- 在拆分后的发票单据中设置状态标识,如 `splitFlag` 和 `overrunFlag`,用以记录单据是否已经经过拆分处理以及是否存在超限情况。 5. **数据结构与算法优化**: - 使用集合框架(如 `List` 和 `Map`)来存储...
这个"数字金额分割"的Demo提供了一个便捷的解决方案,可以将数字金额按照特定格式进行分隔,使得数值更易读,提高用户体验。下面我们将深入探讨这个知识点。 首先,我们来理解数字金额分割的基本概念。在日常生活中...
例如,输入的数字1234567会被格式化成"1,234,567"。我们需要在`afterTextChanged`中捕获到输入的文本,然后用`DecimalFormat`进行格式化,并将格式化后的结果设回`EditText`。 对于金额限制,我们需要确保用户输入...
Java语言提供两种主要的方式来生成随机数:`java.util.Random` 和 `java.lang.Math.random()`。这两个类虽然都可以生成随机数,但它们的功能和用法有所不同。 `java.util.Random` 是一个完整的随机数生成器类,提供...
例如,在将 JSON 字符串转换为 Map 时,如果 JSON 中包含一个非常大的数字,例如 12345678901234567890,这个数字在 Java 中可能会被表示为科学计数法的形式,例如 1.2345678901234567E22。这可能会导致数据的精度...
- **转换逻辑**:虽然示例代码中没有给出具体的转换逻辑,但可以想象在类中应该定义了一个方法,该方法接收一个数字作为输入,先将其格式化为带有小数点的标准格式,然后逐个字符地替换为对应的汉字,并根据金额单位...
4. **CLASSPATH的设置**:通过设置环境变量`CLASSPATH`指向.jar文件路径,使得Java运行时能够找到所需的类库。 5. **import的使用**:通过`import`语句导入其他包中的类或接口,实现跨包调用。 **实施步骤:** - 在...
在Java编程中,BigDecimal类是用于处理大数值和精确浮点计算的重要工具,尤其是在金融或会计领域,确保了计算的精确性。本示例代码主要关注如何使用BigDecimal进行四舍五入操作,以保留两位小数,并将金额从单位分...
### Java练习题知识点详解 #### 1. 斐波那契数列 - **知识点**:斐波那契数列是一种常见的数学数列,每个数是前两个数的和(除了前两个数)。数列从0和1开始,后续每一项都是前两项之和。 - **实现方法**: - 使用...
例如,在 Excel 单元格中输入 1,读取后可能会变成 1.0,而输入 2.2 可能会变成 2.1999999997。这种情况下,我们需要解决数值精度损失的问题,以确保读取到的数据是正确的。 解决方法一: 将 Excel 单元格改为文本...
4. **解释型**:Java代码被编译成字节码后由JVM解释执行,而不是直接编译成本地机器代码。 5. **多线程**:Java内置对多线程的支持,可以轻松编写并发程序。 6. **安全性**:Java拥有强大的安全机制,包括沙箱模型、...
在Android开发中,有时我们需要实现类似支付宝余额增长或交易金额变化时那种动态跑动的数字效果,这在UI设计上可以提升用户体验,增加视觉吸引力。本文将深入探讨如何使用自定义视图`NumberRunView`来实现这种效果,...
`<fmt:formatNumber>`标签用于格式化数字,可以将数字转换为货币、百分比或普通数字格式。其基本语法如下: ```xml 变量名" value="数值" type="格式类型" currencySymbol="货币符号" maxFractionDigits="最大小数...
84.8. 将一个键盘输入的数字转化成中文输出(例如:输入1234567,输出:一百二拾三万四千五百六拾七),请用java语言编一段程序实现! 114 84.9. 题目1:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有...