将阿拉伯数字转换成中文金额大写

前段时间在javaeye上看到一篇关于将数字转换成中文金额大写文章:[url=http://www.iteye.com/topic/203097]将数字转换成中文金额大写形式(Java版)[/url],写得很不错,我也来写一个,我觉得这个算法比其更简单有效。闲话少说,大家看代码吧,代码很简单。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CurrencyConverter {

private static final double MAXIMUM_NUMBER = 9999999999999.99d;

private static final String CN_ZERO = "零";
private static final String CN_SYMBOL = "¥:";
private static final String CN_DOLLAR = "圆";
private static final String CN_INTEGER = "整";

private static final String[] digits = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
private static final String[] radices = new String[] { "", "拾", "佰", "仟" };
private static final String[] bigRadices = new String[] { "", "万", "亿", "万" };
private static final String[] decimals = new String[] { "角", "分" };

public static void main(String[] args) {

// 键盘输入数字
String currencyDigits = input();
// 检查数字合法性
if (check(currencyDigits)) {
//转换大写并输出
System.out.println(convert(currencyDigits));
}
}

/**
* 转换大写
*
* @param currencyDigits
* @return
*/
public static String convert(String currencyDigits) {

String integral = null; // 整数部分
String decimal = null; // 小数部分
String outputCharacters = null; // 最终转换输出结果

String d = null;
int zeroCount = 0, p = 0, quotient = 0, modulus = 0;

// 删除数字中的逗号,
currencyDigits = currencyDigits.replace("/,/g", "");
// 删除数字左边的0
currencyDigits = currencyDigits.replace("/^0+/", "");

// 拆分数字中的整数与小数部分
String[] parts = currencyDigits.split("\\.");
if (parts.length > 1) {
integral = parts[0];
decimal = parts[1];

// 如果小数部分长度大于2,四舍五入,保留两位小数
if (decimal.length() > 2) {
long dd = Math.round(Double.parseDouble("0."+decimal) * 100) ;
decimal = Long.toString(dd);
}

} else {
integral = parts[0];
decimal = "0";
}

// Start processing:
outputCharacters = "";
// Process integral part if it is larger than 0:
if (Double.parseDouble(integral) > 0) {

zeroCount = 0;

for (int i = 0; i < integral.length(); i++) {

p = integral.length() - i - 1;
d = integral.substring(i, i + 1);

quotient = p / 4;
modulus = p % 4;
if (d.equals("0")) {
zeroCount++;
} else {
if (zeroCount > 0) {
outputCharacters += digits[0];
}
zeroCount = 0;
outputCharacters += digits[Integer.parseInt(d)] + radices[modulus];
}
if (modulus == 0 && zeroCount < 4) {
outputCharacters += bigRadices[quotient];
}
}
outputCharacters += CN_DOLLAR;
}

// Process decimal part if it is larger than 0:
if (Double.parseDouble(decimal) > 0) {
for (int i = 0; i < decimal.length(); i++) {
d = decimal.substring(i, i + 1);
if (!d.equals("0")) {
outputCharacters += digits[Integer.parseInt(d)] + decimals[i];
} else {
if (i == 0) {
outputCharacters += CN_ZERO;
}
}
}
}

// Confirm and return the final output string:
if (outputCharacters.equals("")) {
outputCharacters = CN_ZERO + CN_DOLLAR;
}
if (decimal == null || decimal.equals("0")) {
outputCharacters += CN_INTEGER;
}

outputCharacters = CN_SYMBOL + outputCharacters;
return outputCharacters;
}

/**
* 从键盘输入要转换的数字
*
* @return
*/
private static String input() {

System.out.println("请输入一个数字(精确到小数点后两位):");
Scanner scanner = new Scanner(System.in);
String currencyDigits = scanner.next();
scanner.close();
return currencyDigits;
}

/**
* 检查输入数字的合法性
*
* @param currencyDigits
* @return
*/
private static boolean check(final String currencyDigits) {
if (currencyDigits == null || currencyDigits.trim().equals("")) {
System.out.println("没有输入要转换的数字");
return false;
}

Pattern pattern = Pattern.compile("/[^,.\\d]/", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(currencyDigits);

if (matcher.find()) {
System.out.println("数字中含有非法字符!");
return false;
}

pattern = Pattern.compile("/^((\\d{1,3}(,\\d{3})*(.((\\d{3},)*\\d{1,3}))?)|(\\d+(.\\d+)?))$/",
Pattern.CASE_INSENSITIVE);
matcher = pattern.matcher(currencyDigits);
if (matcher.find()) {
System.out.println("错误的数字格式!");
return false;
}

if (Double.parseDouble(currencyDigits) > MAXIMUM_NUMBER) {
System.out.println("超出转换最大范围!");
return false;
}

return true;
}
}
数字转换为中文大写的4种算法 阿拉伯数字 转换为 中文大写数字的4种算法 立即下载

相关推荐

Python实现把数字转换成中文

周末在家,写了个小程序,用于将阿拉伯数字转换化大写中文。程序没经过任何优化,出没经过详细的测试,挂到网上,方便将来有需要的时候直接拿来用。 #!/usr/bin/python #-*- encoding: utf-8 -*- import types class NotIntegerError(Exception): pass class OutOfRangeError(Exception): pass _MAPPING = (u'零', u'一', u'二', u'三', u'四', u'五', u'六', u'七', u'八', u'九', ) _P0 = (u'', u'十',

Python 阿拉伯数字转换为中文大写数字

题目 python练习的一个小实验, 题目如下图: 附阿拉伯数字对应的中文大写: 思路 1. 通过定义一个字典进行阿拉伯数字与大写中文的对比储存 2. 将用户的输入首先分割为整数与小数部分分别进行处理 3. 整数部分可以分割为以 4 位数字为一组的列表来进行转换处理,这样便于进行 (兆,亿,万,圆)。的单位处理 4. 首先将分割的 4 位数字一组的数据进行转化处理,便...

angry_program的博客 1万+

python中将阿拉伯数字转换成中文的实现代码

复制代码 代码如下: #!/usr/bin/python #-*- encoding: utf-8 -*- import types class NotIntegerError(Exception): pass class OutOfRangeError(Exception): pass _MAPPING = (u’零’, u’一’, u’二’, u’三’, u’四’, u’五’, u’六’, u’七’, u’八’, u’九’, ) _P0 = (u”, u’十’, u’百’, u’千’, ) _S4, _S8, _S16 = 10 ** 4 , 10 ** 8, 10 ** 16 _MIN,

python数字转换成中文大写_Python将阿拉伯数字转化为中文大写

利用Python将阿拉伯数字转化为中文大写,其实最麻烦的地方就是中间空多个0的问题,这种情况下,采用拆分法则,将一个大数字,先拆分成整数部分和小数部分,再对整数部分按照仟、万、亿、兆分位拆分为四个字符串组成的List,每个字符串最多4个字符,然后对每个分位的字符串用大写函数转换成大写,最后合并,这样等于缩减了问题,处理就相对简单了。#!/usr/bin/env python# -*- coding...

weixin_39618456的博客 3114

python程序设计 将阿拉伯数字转换为大写数字

将阿拉伯数字转换为大写数字,主要解决小数点问题,

Ubuntu安装有线网卡驱动

问题:插入网线后,无法识别有线连接。 原因:主板有线网卡的型号和系统中网卡的驱动不匹配 解决 前提条件: 需要连wifi通网,因为需要安装dkms,和下载驱动。 删除原驱动 1、查看网卡型号 lspci | grep net 我的网卡型号是8125 2、查看网卡驱动 lspci -k 网卡驱动是r8169 3、卸载网卡驱动 找出位置 modinfo r8169 | grep filename 然后删除 rm path/r8169.ko 卸载驱动 rmmod r8169 查看是否卸载成功 lsm

weixin_43932656的博客 1万+

1.(python)阿拉伯数字转中文大写

dic_num = {"1": "壹", "2": "贰", "3": "叁", "4": "肆", "5": "伍", "6": "陆", "7": "柒", "8": "捌", "9": "玖", } dic_unit = {1: "", 2: "拾", 3: "佰", 4: "仟", 5: "万"} while 1: fs = [] daxie = "" num = input("\n请输入数字(1-99999),若输入q则退出程序:") if int(num) &l.

我是高鹏 4908

MCSDK5.4.8电机库双电阻采样适配:从扇区判断到固定采样的重构实践

本文详细解析了MCSDK5.4.8电机库中双电阻采样技术的重构实践,从扇区判断到固定采样的关键步骤。通过硬件配置优化、核心文件重构及电流读取函数改造,实现高效稳定的电机控制,特别适用于成本敏感型项目。文章还提供了占空比限制计算、参数调整及常见问题排查等实用技巧,助力工程师快速掌握两电阻采样方法。

weixin_42532938的博客 281

【工具封装】Python 实现将阿拉伯数字 ===> 转换成中文大写数字

def num_to_ch(num): """ 功能说明:讲阿拉伯数字转换成中文数字(转换[0, 10000)之间的阿拉伯数字 ) """ num = int(num) _MAPPING = (u'零', u'一', u'二', u'三', u'四', u'五', u'六', u'七', u'八', u'九', ) _P0 = (u'', u'十'...

Nick.Peng's Blogs 4667

Ubuntu 22.04下Nvidia显卡驱动安装全攻略:从PPA源到避坑指南

本文详细介绍了在Ubuntu 22.04系统下安装Nvidia显卡驱动的完整流程,包括PPA源的使用、旧驱动清理、安装后验证及常见问题解决方案。特别针对机器学习开发者和图形设计师,提供了从基础安装到性能调优的全方位指南,帮助用户避免常见安装陷阱并优化GPU性能。

weixin_29213655的博客 382

【Niagara Vykon N4 】物联网学习 03照明控制及照明时间表

3.1 设计思路 3.2逻辑组件添加 ①依据原有控制照明逻辑,打开palette,找到schedule模块,添加BoolenSchedule。 ②打开kitContrl,找到Util,并添加BoolenSwitch。 ③剪切到原有的逻辑线,并进行逻辑连接,如下图。 ④新建BooleanWritable,命名为Switch,设置参数并进行逻辑连接,若下图。 3.3界面设计 ⑤至此完成了逻辑的设...

weixin_45217107的博客 2863

小技巧2:Python 实现阿拉伯数字转化为中文数字

总结一下,以上简单介绍了一下我个人通过Python代码实现阿拉伯数字向中文数字转化的实现思路,虽然目前只能最多实现万位数的转化,但是中文数字就是4位数为一阶的,即万到亿,亿到兆,兆到京的转化,是以10的4次方为进制的。而值此圣诞佳节,我就贡献一下个人的绵薄之力,向大家展示一下我个人研究的简易的通过Python实现的将阿拉伯数字转化为中文数字的方法,搭建一条东西方的桥梁。这个部分是通过函数计算出阿拉伯数字的最大位,也就是确定中文数字的最大位,以便确定中文数字的命名规则。Kamen Black君。

追星,但也不要忘了土地 1万+

自动驾驶小车DIY:树莓派+激光雷达实现DWA路径规划(从仿真到实车)

本文详细介绍了如何基于树莓派与激光雷达,从零搭建一套完整的自动驾驶小车系统,并实现DWA局部路径规划算法。内容涵盖硬件选型、ROS环境部署、DWA算法原理与仿真,以及关键的实车调试与性能优化技巧,为创客和竞赛爱好者提供了一套低成本、高可行性的自主导航解决方案。

kiwi8的博客 530

将阿拉伯数字转换成中文大写金额的形式

问题:编写控制台程序,用户输入阿拉伯数字的金额,系统自动转换成中文大写金额的形式输出。 例如:输入458796; 转换为:肆拾伍万捌仟柒佰玖拾陆。 问题分析:既然是数字大小写转换,那么我们这样考虑问题:先最高考虑到千万级别。那么我们把这个数抽象成由个、十、百、千、万这么几个位组成。 ...

qq_42242380的博客 2544

VS Code/TRAE集成Cppcheck并启用MISRA规则

本文探讨了嵌入式开发中Cppcheck工具集成与MISRA规则检查的必要性。详细介绍了安装配置步骤:安装VSCode/TRAE、Cppcheck软件、配置插件参数、安装Python环境,并重点说明了MISRA规则文件的设置方法。通过完整的配置流程,实现了嵌入式开发环境下静态检查与安全标准的落地。

SDFangFang2025的博客 1282

【点云概述】什么是点云、来源、种类、特点、处理?

【点云概述】什么是点云、来源、种类、特点、处理?点云(point cloud)是空间中点的数据集,可以表示三维形状或对象,通常由三维扫描仪获取。点云中每个点的位置都由一组笛卡尔坐标 ( X , Y , Z ) (X, Y, Z) (X,Y,Z)描述,有些可能含有色彩信息 ( R , G , B ) (R, G, B) (R,G,B)或物体反射面强度(Intensity)信。

智慧空间实验室 9820

C#实现的【阿拉伯数字转换成中文大写金额】代码(原创)

以下C#代码实现了将阿拉伯数字转换成中文大写金额的功能,并Visual Studio.NET 2003 下调试基本通过(未经严格测试,希望各位发现错误后与作者联系fanz2000@sohu.com,或直接在csdn上回帖告知)。代码的主调函数为ConvertSum,它的参数是string类型的数字字符串。在ASP.NET中调用方式如下:Label1.Text=ConvertSum("数字字符串

fanz2000的专栏 6322

Pinocchio 快速详细入门教程 —— 开源机器人运动学动力学库

本文介绍了机器人学中的数字机器人学、正逆运动学、动力学仿真与控制、最优控制等核心主题,以及Pinocchio库的应用。内容包括: 数字机器人学:通过UR5机器人模型演示了构型空间采样、碰撞检测、路径规划等基础操作,使用优化方法在约束条件下寻找有效构型。 运动学:详细讲解了二维和三维机器人的正运动学(构型到末端位置)和逆运动学(目标位置到构型),包括串联机械臂和并联机器人的处理。 动力学与控制:介绍了动力学仿真(如自由落体、摩擦效应)、PD控制、计算扭矩控制,以及接触仿真(碰撞检测与处理)。 最优控制:以独轮

机器人控制与仿真应用 2883

C#实现的【阿拉伯数字转换成中文大写金额】代码

 以下C#代码实现了将阿拉伯数字转换成中文大写金额的功能,并Visual Studio.NET 2003 下调试基本通过(未经严格测试,希望各位发现错误后与作者联系fanz2000@sohu.com,或直接在csdn上回帖告知)。代码的主调函数为ConvertSum,它的参数是string类型的数字字符串。在ASP.NET中调用方式如下:Label1.Text=ConvertSum("数字

1582

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

如何把输入的阿拉伯数字金额转换成中文大写金额

import java.text.NumberFormat; import java.util.HashMap; import java.util.Map; public class MoneyFormat { public static final String ZERO="零"; public static final String ONE="壹";

shandalue的专栏 1451

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

阿拉伯数字转换成中文大写金额

C#实现的【阿拉伯数字转换成中文大写金额】代码代码的主调函数为ConvertSum,它的参数是string类型的数字字符串。在ASP.NET中调用方式如下:Label1.Text=ConvertSum("数字字符串");其代码如下://作者:fanz2000//Email:fanz2000@sohu.com/// /// 转换数字金额主函数(包括小数)/// /// 数

tq06f2r的专栏 802

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C#写的将阿拉伯数字转换成中文大写金额代码

C#写的将阿拉伯数字转换成中文大写金额代码  

golden的专栏 2297

报表上金额由阿拉伯数字转换成中文大写

        ///         /// 总金额大小写转换        ///         ///         ///         private void xrTableCell22_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)        {            string s

744

C# 实现将阿拉伯数字转换成中文大写金额

public static string CmycurD(decimal num)         {             string str1 = "零壹贰叁肆伍陆柒捌玖";            //0-9所对应的汉字             string st

Stay hungry,stay foolish。 973

阿拉伯数字小写金额转换成中文大写金额C程序说明

阿拉伯数字小写金额转换成中文大写金额C程序说明 1、问题的提出      寒假帮同学交缴话费时,不经意间看到收据上同时有小写金额和大写金额,想想各种各样的票据诸如缴费收据、银行业务回单、商场销售凭证、专用发票等都是如此。若是手写的就列出了中文大写金额的货币单位(一般最大就个佰万),只要填写大写数字和划差就行;若是机器打印的,则是一次性将大写数字和货币单位一起打印出来,一般还会打印当前日期。嗯,

hwmt2012的专栏 6893

C#实现的【阿拉伯数字转换成中文大写金额】

//作者:fanz2000 //Email:fanz2000@sohu.com /// /// 转换数字金额主函数(包括小数) /// /// 数字字符串 /// 转换成中文大写后的字符串或者出错信息提示字符串 public string ConvertSum(string str) { if(!IsPositveDecimal(str)) return "输入的...

254
上一篇: 在webLogic 10.3中部署Hibernate 3.5出现 ClassNotFoundException解决办法
下一篇: One-JAR Quick Start
sundoctor
博客等级 码龄23年 2粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值