阿拉伯数字金钱转中文大写
- 本人是刚入行不久的菜鸟,由于工作可能会用到这个功能于是借鉴了前辈EXTjs前端的这个转大小写功能,用java 仿照写了一个,加上了负数处理功能(修改了-0.9...)bug的问题。
- Long.parseLong(integerNum, 10) > 0)
- 这个决定了处理数据的范围大小。 如果数据库里面的数据是BigDecimal类型,为了更精确那么以下的数据处理方式就需要改一改。 String n = integerNum.substring(i,i+1);
这段代码在EXTJS里面是String n = integerNum.substr(i,1)没问题,但是java中处理不同,最后排错才循环取得时候java中是往后依次取需要循环加1;不知道哪位大神前辈能指教指教EXTJS中substr这里与java的区别;当时考虑到需要开具负数发票的情况于是想了个简单的方法拼上负数的符号来解决这个问题。 这个方法的核心部分在整数部分截取后处理的算法(说实话没有透彻理解...),网上也看了其他前辈写的代码比这个多一倍的代码,但是好像有BUG ,,由于测的简单我这个不知道有没有BUG 希望哪位前辈能指点指点,万分感谢。 - 有一个网上前辈写的关于中国银行金钱的汉化处理规则,感觉很不错,可以搜索这句话:关于金钱中文大写表示规则
- 关于中间去连续零的方法我发现网上这位前辈写的比较好这是他的博客链接地址:http://blog.chinaunix.net/uid-615168-id-155559.html
- package practise;
- /**
- * 阿拉伯数字金钱转中文大写
- *
- * @author zt
- * @Date 2015年9月24日
- */
- package practise;
- /**
- * 阿拉伯数字金钱转中文大写
- *
- * @author zt
- * @Date 2015年9月24日
- */
- public class ChangeMoneyToChinese {
- private static String[] cCharcters = new String[] { "零", "壹", "贰", "叁",
- "肆", "伍", "陆", "柒", "捌", "玖" };/* 数字对应的汉字大写 */
- private static String[] cnDws = new String[] { "", "拾", "佰", "仟" };/* 基本单位 */
- private static String[] cnDdws = new String[] { "", "万", "亿", "兆" };/* 大单位扩展 */
- private static String[] cnDecs = new String[] { "角", "分", "毫", "厘" };
- private static String cnInteger = "整";/* 整型金额处理后跟的字符 */
- private static String cnLast = "元";/* 数据处理后面 */
- private static Double maxNum = 999999999999999.9999;/* 定义一个最大处理数 */
- private static String bz = "负";
- private static String integerNum;/* 金额整数部分 */
- private static String decimalNum;/* 金额小数部分 */
- private static String[] parts = new String[2];/* 金额字符串分割部分 */
- private static String chineseStr = "";/* 接收转换后的中文大写字符串 */
- private static char str;
- public static String changeToChinese(String money) {
- str = money.charAt(0);
- if (str == '-') {
- money = money.substring(1, money.length());/* 负数处理 */
- }
- /* 有三种其他情况:1,money="" 2.money=0 3,超出最大处理数据 */
- /* 将获取的字符串数值数据转换为double型便于与数值进行比较 */
- Double moneys = Double.parseDouble(money);
- if (money == "") {
- chineseStr = "";
- return chineseStr;
- } else if (moneys > maxNum) {
- System.out.println("超出最大处理数,无法转换...");
- chineseStr = "";
- return chineseStr;
- } else if (moneys == 0) {
- chineseStr = cCharcters[0] + cnLast + cnInteger;
- return chineseStr;
- } else
- /* 数据正常情况的处理,首先对数据进行整型部分和小数部分安要求进行截取处理 */
- if (money.indexOf(".") == -1) {/* 字符串没有小数点的情况,整型 */
- integerNum = money;/* 赋值整型 */
- decimalNum = "";/* 无小数部分 */
- } else {/* 有小数的情况 */
- parts = money.split("\\.");/* 注意java中分割符号的格式问题\\加分割符号 */
- integerNum = parts[0];
- decimalNum = parts[1];
- if (decimalNum.length() > 4) {/* java中截取字符串需要对位数进行判断操作否则容易报数组下标越界问题 */
- decimalNum = parts[1].substring(0, 4);/* 只保留4位小数 */
- } else {
- decimalNum = parts[1];
- }
- }
- /*--------------------------*/
- /* 对整型部分处理的方法 */
- integerNum(integerNum, str);
- /* 对小数部分的处理方法 */
- decimalNum(decimalNum);
- /* 最后再对转换后的字符串进行判断 */
- /*
- * if(str=='-'){ chineseStr=bz+chineseStr; }
- */
- lastStr(chineseStr, str);/*调用最终处理方法*/
- return chineseStr;
- }
- /* 对数据整型部分处理的方法 */
- public static String integerNum(String integerNum, char str) {
- if (Long.parseLong(integerNum, 10) > 0
- || Long.parseLong(integerNum, 10) == 0) {// 获取整型部分转换,按10进制形式进行转换
- int zeroCount = 0;
- int intLen = integerNum.length();
- for (int i = 0; i < intLen; i++) {
- String n = integerNum.substring(i, i + 1);
- int p = intLen - i - 1;
- int q = p / 4;
- int m = p % 4;
- if (n == "0") {
- zeroCount++;
- } else {
- if (zeroCount > 0) {
- chineseStr += cCharcters[0];
- }
- zeroCount = 0; // 归零
- chineseStr += cCharcters[Integer.parseInt(n)] + cnDws[m];
- }
- if (m == 0 && zeroCount < 4) {
- chineseStr += cnDdws[q];
- }
- }
- chineseStr += cnLast;
- // 整型部分处理完毕
- }
- return chineseStr;
- }
- /* 对小数部分的处理方法 */
- public static String decimalNum(String decimalNum) {
- if (decimalNum != "") {// 小数部分
- int decLen = decimalNum.length();
- for (int i = 0; i < decLen; i++) {
- String n = decimalNum.substring(i, i + 1);
- /*注意循环每次截取的时候需要往后一位进行截取, 向右边移动一位*/
- if (n != "0") {
- chineseStr += cCharcters[Integer.parseInt(n)] + cnDecs[i];
- }
- }
- }
- return chineseStr;
- }
- /* 最后再对转换后的字符串进行判断处理 */
public static String lastStr(String strr, char str) {if (chineseStr == "") {/*0数据判断*/
chineseStr += cCharcters[0] + cnLast + cnInteger;
} else if (decimalNum == "") {/*整型判断*/
chineseStr += cnInteger;
}
if (str == '-') {/*负数最后的处理*/
chineseStr = bz + chineseStr;
}
return chineseStr;
} - public static void main(String[] args) {
- System.out.println(ChangeMoneyToChinese.changeToChinese("999999999999999.9999"));
- System.out.println(ChangeMoneyToChinese.changeToChinese("-0.995"));
- }
- }
阿拉伯数字金钱转中文大写相关推荐
- Python将阿拉伯数字转化为中文大写
利用Python将阿拉伯数字转化为中文大写,其实最麻烦的地方就是中间空多个0的问题,这种情况下,采用拆分法则,将一个大数字,先拆分成整数部分和小数部分,再对整数部分按照仟.万.亿.兆分位拆分为四个字符 ...
- 输入数字怎么变成大写python_Python将阿拉伯数字转化为中文大写
利用Python将阿拉伯数字转化为中文大写,其实最麻烦的地方就是中间空多个0的问题,这种情况下,采用拆分法则,将一个大数字,先拆分成整数部分和小 数部分,再对整数部分按照仟.万.亿.兆分位拆分为四个字 ...
- 把阿拉伯数字翻译成中文大写数字
package com.zcw.zcwbook.demo15;/*** @program: zcwbook* @description: 把阿拉伯数字翻译成中文大写数字* @author: zhaoc ...
- 【工具封装】Python 实现将阿拉伯数字 === 转换成中文大写数字
一.序言: 工具封装第四弹,阿拉伯数字 ===> 转换成 ===> 中文大写数字,喜欢就赶紧收藏+点赞+关注吧 !!! ---- Nick.Peng 二.实现代码如下: #!/usr/ ...
- 将一组阿拉伯数字转换成中文大写数字
题目大概: 将一组阿拉伯数字转换成中文大写数字 52306 ==> 伍万贰千叁百零陆 我实现了将文件中的一组数字(每行为一个数) 形如: Java代码 25364 466932300 ...
- 关于JAVA阿拉伯数字替换为中文大写
话不多说,直接上代码 public static void NunOrChina2(Scanner scan) { boolean flag = true; while (flag){ Str ...
- java实现将阿拉伯数字转成中文大写工具类
package com.sqds.utils;/*** <p>Title: money</p>* <p>Description: * *该类是把阿拉伯数字转换成中文 ...
- 大写汉字转阿拉伯数字c语言,阿拉伯数字转换成中文大写数字
原创作者ACN站:3mile 如:550065转换成"五十五万零六十五"或"伍拾伍万零陆拾伍" 可作为UDF使用的. NUM2CWORD($number,$vV ...
- python数字转换成中文大写_python初学者笔记(2):阿拉伯数字转换成中文大写
题:输入一个数字,转换成中文大写的写法 可运行的程序(Python 2.7.9): 1 #-*- coding: utf-8 -*- #在python2的py文件里面写中文,必须要添加一行声明文件编码 ...
- php将阿拉伯数字转换成中文大写,PHP将阿拉伯数字转换成汉字大写支持小数点
第一种 /*function ch_num($num,$mode=true) { $char = array("零","壹","贰",&qu ...
最新文章
- 沈向洋:浅谈人工智能创造
- java性能调优指南,帮你解决90%的问题!
- AJAX中的Back Button/Bookmarking问题和Nikhil Kothari的Atlas解决方案
- html5 video如何添加进度条_教你制作独一无二的进度条视频效果
- Oracle 数据库中对记录进行分页处理
- python项目-每日日考系统-数据结构
- 华为手表表盘的数字什么意思_知识 手表防水是什么意思?
- socket.io 中文手册 socket.io 中文文档
- BZOJ2342 Shoi2011 双倍回文 【Manacher】
- 数十亿个 Wi-Fi 设备存在缺陷,通信易被窃听!
- 使用Windows 7 管理Windows 2008 R2
- 2022腾讯云学生服务器申请流程(全攻略)
- 轻量级私有云存储企业主要功能探析
- 计算机xp怎么做备份,怎么备份电脑系统?XP环境使用Ghost备份操作系统的步骤
- mt管理器怎么运行HTML文件,MT管理器怎么修改游戏数据 MT管理器修改内购教程
- mac OS系统中 设置ssh连接端口
- MYSQL登录错误:mysqladmin: connect to server at 'localhost' failed acess denied for user 'root'@'localhos
- 蓝桥杯之单片机学习(三)——共阳数码管的静态显示
- Android-O wifi PNO扫描流程
- 【c++面向过程实验6】函数
热门文章
- win7电脑开启屏幕旋转功能吗 Win7系统屏幕的旋转功能如何使用
- 用python批量发送短信_秒嘀云发送短信Python实现
- Oracle 如何定义自动增量autocreament的主键ID?
- 【数据标准】数据指标体系建立
- java 向量 内积_向量内积外积
- html页面的bug记录:简单记录几个编辑html页面遇到的问题
- Windows自带照片查看器恢复办法
- webpack 合并压缩_文章 - coolie PK webpack 之二:CSS 文件的合并与压缩 - FED社区
- ubuntu18.04配置邮件服务: postfix+dovecot+roundcube
- 细粒度分类:Hierarchical Bilinear Pooling(HBP),分级双线性池化(二)