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;
}
}
相关推荐
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 位数字一组的数据进行转化处理,便...
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...
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
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.
MCSDK5.4.8电机库双电阻采样适配:从扇区判断到固定采样的重构实践
本文详细解析了MCSDK5.4.8电机库中双电阻采样技术的重构实践,从扇区判断到固定采样的关键步骤。通过硬件配置优化、核心文件重构及电流读取函数改造,实现高效稳定的电机控制,特别适用于成本敏感型项目。文章还提供了占空比限制计算、参数调整及常见问题排查等实用技巧,助力工程师快速掌握两电阻采样方法。
【工具封装】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'十'...
Ubuntu 22.04下Nvidia显卡驱动安装全攻略:从PPA源到避坑指南
本文详细介绍了在Ubuntu 22.04系统下安装Nvidia显卡驱动的完整流程,包括PPA源的使用、旧驱动清理、安装后验证及常见问题解决方案。特别针对机器学习开发者和图形设计师,提供了从基础安装到性能调优的全方位指南,帮助用户避免常见安装陷阱并优化GPU性能。
【Niagara Vykon N4 】物联网学习 03照明控制及照明时间表
3.1 设计思路 3.2逻辑组件添加 ①依据原有控制照明逻辑,打开palette,找到schedule模块,添加BoolenSchedule。 ②打开kitContrl,找到Util,并添加BoolenSwitch。 ③剪切到原有的逻辑线,并进行逻辑连接,如下图。 ④新建BooleanWritable,命名为Switch,设置参数并进行逻辑连接,若下图。 3.3界面设计 ⑤至此完成了逻辑的设...
小技巧2:Python 实现阿拉伯数字转化为中文数字
总结一下,以上简单介绍了一下我个人通过Python代码实现阿拉伯数字向中文数字转化的实现思路,虽然目前只能最多实现万位数的转化,但是中文数字就是4位数为一阶的,即万到亿,亿到兆,兆到京的转化,是以10的4次方为进制的。而值此圣诞佳节,我就贡献一下个人的绵薄之力,向大家展示一下我个人研究的简易的通过Python实现的将阿拉伯数字转化为中文数字的方法,搭建一条东西方的桥梁。这个部分是通过函数计算出阿拉伯数字的最大位,也就是确定中文数字的最大位,以便确定中文数字的命名规则。Kamen Black君。
自动驾驶小车DIY:树莓派+激光雷达实现DWA路径规划(从仿真到实车)
本文详细介绍了如何基于树莓派与激光雷达,从零搭建一套完整的自动驾驶小车系统,并实现DWA局部路径规划算法。内容涵盖硬件选型、ROS环境部署、DWA算法原理与仿真,以及关键的实车调试与性能优化技巧,为创客和竞赛爱好者提供了一套低成本、高可行性的自主导航解决方案。
将阿拉伯数字转换成中文大写金额的形式
问题:编写控制台程序,用户输入阿拉伯数字的金额,系统自动转换成中文大写金额的形式输出。 例如:输入458796; 转换为:肆拾伍万捌仟柒佰玖拾陆。 问题分析:既然是数字大小写转换,那么我们这样考虑问题:先最高考虑到千万级别。那么我们把这个数抽象成由个、十、百、千、万这么几个位组成。 ...
VS Code/TRAE集成Cppcheck并启用MISRA规则
本文探讨了嵌入式开发中Cppcheck工具集成与MISRA规则检查的必要性。详细介绍了安装配置步骤:安装VSCode/TRAE、Cppcheck软件、配置插件参数、安装Python环境,并重点说明了MISRA规则文件的设置方法。通过完整的配置流程,实现了嵌入式开发环境下静态检查与安全标准的落地。
【点云概述】什么是点云、来源、种类、特点、处理?
【点云概述】什么是点云、来源、种类、特点、处理?点云(point cloud)是空间中点的数据集,可以表示三维形状或对象,通常由三维扫描仪获取。点云中每个点的位置都由一组笛卡尔坐标 ( X , Y , Z ) (X, Y, Z) (X,Y,Z)描述,有些可能含有色彩信息 ( R , G , B ) (R, G, B) (R,G,B)或物体反射面强度(Intensity)信。
C#实现的【阿拉伯数字转换成中文大写金额】代码(原创)
以下C#代码实现了将阿拉伯数字转换成中文大写金额的功能,并Visual Studio.NET 2003 下调试基本通过(未经严格测试,希望各位发现错误后与作者联系fanz2000@sohu.com,或直接在csdn上回帖告知)。代码的主调函数为ConvertSum,它的参数是string类型的数字字符串。在ASP.NET中调用方式如下:Label1.Text=ConvertSum("数字字符串
Pinocchio 快速详细入门教程 —— 开源机器人运动学动力学库
本文介绍了机器人学中的数字机器人学、正逆运动学、动力学仿真与控制、最优控制等核心主题,以及Pinocchio库的应用。内容包括: 数字机器人学:通过UR5机器人模型演示了构型空间采样、碰撞检测、路径规划等基础操作,使用优化方法在约束条件下寻找有效构型。 运动学:详细讲解了二维和三维机器人的正运动学(构型到末端位置)和逆运动学(目标位置到构型),包括串联机械臂和并联机器人的处理。 动力学与控制:介绍了动力学仿真(如自由落体、摩擦效应)、PD控制、计算扭矩控制,以及接触仿真(碰撞检测与处理)。 最优控制:以独轮
C#实现的【阿拉伯数字转换成中文大写金额】代码
以下C#代码实现了将阿拉伯数字转换成中文大写金额的功能,并Visual Studio.NET 2003 下调试基本通过(未经严格测试,希望各位发现错误后与作者联系fanz2000@sohu.com,或直接在csdn上回帖告知)。代码的主调函数为ConvertSum,它的参数是string类型的数字字符串。在ASP.NET中调用方式如下:Label1.Text=ConvertSum("数字
廖雪峰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="壹";
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
阿拉伯数字转换成中文大写金额
C#实现的【阿拉伯数字转换成中文大写金额】代码代码的主调函数为ConvertSum,它的参数是string类型的数字字符串。在ASP.NET中调用方式如下:Label1.Text=ConvertSum("数字字符串");其代码如下://作者:fanz2000//Email:fanz2000@sohu.com/// /// 转换数字金额主函数(包括小数)/// /// 数
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
C#写的将阿拉伯数字转换成中文大写金额代码
C#写的将阿拉伯数字转换成中文大写金额代码
报表上金额由阿拉伯数字转换成中文大写
/// /// 总金额大小写转换 /// /// /// private void xrTableCell22_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) { string s
C# 实现将阿拉伯数字转换成中文大写金额
public static string CmycurD(decimal num) { string str1 = "零壹贰叁肆伍陆柒捌玖"; //0-9所对应的汉字 string st
阿拉伯数字小写金额转换成中文大写金额C程序说明
阿拉伯数字小写金额转换成中文大写金额C程序说明 1、问题的提出 寒假帮同学交缴话费时,不经意间看到收据上同时有小写金额和大写金额,想想各种各样的票据诸如缴费收据、银行业务回单、商场销售凭证、专用发票等都是如此。若是手写的就列出了中文大写金额的货币单位(一般最大就个佰万),只要填写大写数字和划差就行;若是机器打印的,则是一次性将大写数字和货币单位一起打印出来,一般还会打印当前日期。嗯,
C#实现的【阿拉伯数字转换成中文大写金额】
//作者:fanz2000 //Email:fanz2000@sohu.com /// /// 转换数字金额主函数(包括小数) /// /// 数字字符串 /// 转换成中文大写后的字符串或者出错信息提示字符串 public string ConvertSum(string str) { if(!IsPositveDecimal(str)) return "输入的...
1万+



被折叠的 条评论
为什么被折叠?



