iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >如何使用Java完成人民币大写转化
  • 467
分享到

如何使用Java完成人民币大写转化

2023-06-14 20:06:03 467人浏览 八月长安
摘要

这篇文章给大家分享的是有关如何使用Java完成人民币大写转化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列:

这篇文章给大家分享的是有关如何使用Java完成人民币大写转化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

Java有哪些集合

Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列:有序,可重复的;3、Set集合:不可重复;4、Map映射:无序,键唯一,值不唯一。

一、前言

人民币大写金额的正确写法:

整数部分:零、壹、贰、叁、肆、伍、陆、柒、捌、玖

小数部分:角、分、厘

数位部分:拾、佰、仟、万、亿、元

二、注意

阿拉伯数字小写金额数字中有 “0” 时,中文大写应按照汉语语言规律、金额数字构成和防止涂改的要求进行书写。举例如下:

阿拉伯数字中间有 “0” 时,中文大写要写“零”字,如¥1409.50应写成人民币壹仟肆佰零玖元伍角。

阿拉伯数字中间连续有几个 “0” 时、中文大写金额中间可以只写一个“零”字,如¥6007.14应写成人民币陆仟零柒元壹角肆分。

阿拉伯金额数字万位和元位是 “0” ,或者数字中间连续有几个 “0” ,万位、元位也是 “0” 但千位、角位不是 “0” 时,中文大写金额中可以只写一个零字,也可以不写“零”字,
如¥1680.32应写成人民币壹仟陆佰捌拾元零叁角贰分,或者写成人民币壹仟陆佰捌拾元叁角贰分。又如¥107000.53应写成人民币壹拾万柒仟元零伍角叁分,或者写成人民币壹拾万零柒仟元伍角叁分。

阿拉伯金额数字角位是 “0” 而分位不是 “0” 时,中文大写金额“元”后面应写“零”字,如¥16409.02应写成人民币壹万陆仟肆佰零玖元零贰分,又如¥325.04应写成人民币叁佰贰拾伍元零肆分。

三、思路分析

  • 初始化人民币大写金额,其中数位的顺序是有要求的。

  • 对传入的字符串进行校验(非空、特殊字符)

  • 判断字符串的长度是否超过了转换范围

  • 判断是否存在负数,对负号进行替换

  • 分离整数部分和小数部分

  • 判断整数部分是否已经达到万

这里使用到了一个StringUtils类和单元测,junit,需要导入依赖

<dependency>            <groupId>commons-lang</groupId>            <artifactId>commons-lang</artifactId>            <version>2.6</version>        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>            <scope>test</scope>        </dependency>    </dependencies>

四、完整代码

public class ConvertUpMoney {    //整数部分的人民币大写    private static final String[] NUMBERS = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};    //数位部分    private static final String[] IUNIT = {"元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟"};    //小数部分的人民币大写    private static final String[] DUNIT = {"角", "分", "厘"};    //转成中文的大写金额    public static String toChinese(String str) {        //判断输入的金额字符串是否符合要求        if (StringUtils.isBlank(str) || !str.matches("(-)?[\\d]*(.)?[\\d]*")) {            System.out.println("抱歉,请输入数字!");            return str;        }        //判断输入的金额字符串        if ("0".equals(str) || "0.00".equals(str) || "0.0".equals(str)) {            return "零元";        }        //判断是否存在负号"-"        boolean flag = false;        if (str.startsWith("-")) {            flag = true;            str = str.replaceAll("-", "");        }        //如果输入字符串中包含逗号,替换为 "."         str = str.replaceAll(",", ".");        String integerStr;//整数部分数字        String decimalStr;//小数部分数字        //分离整数部分和小数部分        if (str.indexOf(".") > 0) {//整数部分和小数部分            integerStr = str.substring(0, str.indexOf("."));            decimalStr = str.substring(str.indexOf(".") + 1);        } else if (str.indexOf(".") == 0) {//只存在小数部分 .34            integerStr = "";            decimalStr = str.substring(1);        } else { //只存在整数部分 34            integerStr = str;            decimalStr = "";        }        //整数部分超出计算能力,直接返回        if (integerStr.length() > IUNIT.length) {            System.out.println(str + ":超出计算能力");            return str;        }        //整数部分存入数组  目的是为了可以动态的在字符串数组中取对应的值        int[] integers = toIntArray(integerStr);        //判断整数部分是否存在输入012的情况        if (integers.length > 1 && integers[0] == 0) {            System.out.println("抱歉,请输入数字!");            if (flag) {                str = "-" + str;            }            return str;        }        boolean isWan = isWanUnits(integerStr);//设置万单位        //小数部分数字存入数组        int[] decimals = toIntArray(decimalStr);        String result = getChineseInteger(integers, isWan) + getChineseDecimal(decimals);//返回最终的大写金额        if (flag) {            return "负" + result;//如果是负数,加上"负"        } else {            return result;        }    }    //将字符串转为int数组    private static int[] toIntArray(String number) {        //初始化一维数组长度        int[] array = new int[number.length()];        //循环遍历赋值        for (int i = 0; i < number.length(); i++) {            array[i] = Integer.parseInt(number.substring(i, i + 1));        }        return array;    }    //将整数部分转为大写的金额    public static String getChineseInteger(int[] integers, boolean isWan) {        StringBuffer chineseInteger = new StringBuffer("");        int length = integers.length;        // 对于输入的字符串为 "0." 存入数组后为 0        if (length == 1 && integers[0] == 0) {            return "";        }        for (int i = 0; i < length; i++) {            String key = "";//0325464646464            if (integers[i] == 0) {                if ((length - i) == 13)//万(亿)                    key = IUNIT[4];                else if ((length - i) == 9) {//亿                    key = IUNIT[8];                } else if ((length - i) == 5 && isWan) {//万                    key = IUNIT[4];                } else if ((length - i) == 1) {//元                    key = IUNIT[0];                }                if ((length - i) > 1 && integers[i + 1] != 0) {                    key += NUMBERS[0];                }            }            chineseInteger.append(integers[i] == 0 ? key : (NUMBERS[integers[i]] + IUNIT[length - i - 1]));        }        return chineseInteger.toString();    }    //将小数部分转为大写的金额    private static String getChineseDecimal(int[] decimals) { //角 分 厘   038  壹分捌厘        StringBuffer chineseDecimal = new StringBuffer("");        for (int i = 0; i < decimals.length; i++) {            if (i == 3) {                break;            }            chineseDecimal.append(decimals[i] == 0 ? "" : (NUMBERS[decimals[i]] + DUNIT[i]));        }        return chineseDecimal.toString();    }    //判断当前整数部分是否已经是达到【万】    private static boolean isWanUnits(String integerStr) {        int length = integerStr.length();        if (length > 4) {            String subInteger = "";            if (length > 8) {                subInteger = integerStr.substring(length - 8, length - 4);            } else {                subInteger = integerStr.substring(0, length - 4);            }            return Integer.parseInt(subInteger) > 0;        } else {            return false;        }    }

五、代码测试

  • 阿拉伯数字中包含 "0"的测试

  • 特殊情况的测试(特殊字符、负数、超过人民币数值范围)。

@Test    public void test() {        String number = "1409.50";        String afterStr = ConvertUpMoney.toChinese(number);        System.out.println(number + ": " + afterStr);//壹仟肆佰零玖元伍角    }    @Test    public void test2() {        String number = "6007.14";        String afterStr = ConvertUpMoney.toChinese(number);        System.out.println(number + ": " + afterStr);//陆仟零柒元壹角肆分    }    @Test    public void test3() {        String number = "1680.32";        String afterStr = ConvertUpMoney.toChinese(number);        System.out.println(number + ": " + afterStr);//壹仟陆佰捌拾元叁角贰分    }    @Test    public void test4() {        String number = "107000.53";        String afterStr = ConvertUpMoney.toChinese(number);        System.out.println(number + ": " + afterStr);//壹拾万零柒仟元伍角叁分    }    @Test    public void test5() {        String number = "16409.02";        String afterStr = ConvertUpMoney.toChinese(number);        System.out.println(number + ": " + afterStr);//壹万陆仟肆佰零玖元零贰分    }    @Test    public void test6() {        String number = "325.04";        String afterStr = ConvertUpMoney.toChinese(number);        System.out.println(number + ": " + afterStr);//叁佰贰拾伍元零肆分    }    @Test    public void test7() {        String number = "-0325.04";        String afterStr = ConvertUpMoney.toChinese(number);//抱歉,请输入数字!        System.out.println(number + ": " + afterStr);    }    @Test    public void test8() {        String number = "325#sdr";        String afterStr = ConvertUpMoney.toChinese(number);//抱歉,请输入数字!        System.out.println(number + ": " + afterStr);//325#sdr: 325#sdr    }    @Test    public void test9() {        String number = "-34327987";        String afterStr = ConvertUpMoney.toChinese(number);//-34327987: 负叁仟肆佰叁拾贰万柒仟玖佰捌拾柒元        System.out.println(number + ": " + afterStr);    }    @Test    public void test10() {        String number = "78934029675923532";        System.out.println("长度 :" + number.length());//长度 :17        String afterStr = ConvertUpMoney.toChinese(number);//78934029675923532:超出计算能力        System.out.println(number + ": " + afterStr);    }

图解转换的过程:

如何使用Java完成人民币大写转化

整数部分转化人民币大写方法简写

如何使用Java完成人民币大写转化

小数部分转换人民币大写方法简写

如何使用Java完成人民币大写转化

转换过程:

如何使用Java完成人民币大写转化

转换结果:

贰拾叁亿贰仟柒佰捌拾玖万叁仟肆佰壹拾玖元

感谢各位的阅读!关于“如何使用Java完成人民币大写转化”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 如何使用Java完成人民币大写转化

本文链接: https://www.lsjlt.com/news/274549.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用Java完成人民币大写转化
    这篇文章给大家分享的是有关如何使用Java完成人民币大写转化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列:...
    99+
    2023-06-14
  • 教你怎么用Java完成人民币大写转化
    目录一、前言二、注意三、思路分析四、完整代码五、代码测试一、前言 人民币大写金额的正确写法: 整数部分:零、壹、贰、叁、肆、伍、陆、柒、捌、玖 小数部分:角、分、厘 数位部分:拾、佰...
    99+
    2024-04-02
  • php中如何将人民币小写转换成大写
    这篇文章将为大家详细讲解有关php中如何将人民币小写转换成大写,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php人民币小写转大写的方法:首先创建一个PHP示例文件;然后通过“function num2r...
    99+
    2023-06-14
  • Java人民币小写转大写字符串的实现
    写了一个人民币小写转大写的方法,Java版本,思路很简单,没有测出什么Bug,有bug欢迎反馈 public class RMBChange { private stat...
    99+
    2024-04-02
  • PHP如何将数字转换为人民币大写
    这篇文章主要讲解了“PHP如何将数字转换为人民币大写”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP如何将数字转换为人民币大写”吧!需要用到的函数在开始编写这个程序之前,我们需要熟悉一些...
    99+
    2023-07-05
  • python中如何实现美元转换成人民币
    这篇文章主要介绍了python中如何实现美元转换成人民币,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、说明程序可以接受人民币或美元输入,转换为美元或人民币输出。人民币采用...
    99+
    2023-06-15
  • php如何实现数字转化成大写
    小编给大家分享一下php如何实现数字转化成大写,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php实现数字转化成大写的方法:1、通过“toChineseNumbe...
    99+
    2023-06-15
  • 如何使用Java实现大小写转换
    这篇文章主要介绍“如何使用Java实现大小写转换”,在日常操作中,相信很多人在如何使用Java实现大小写转换问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Java实现大小写转换”的疑惑有所帮助!接下来...
    99+
    2023-07-02
  • 使用Java怎么将小写字符串转换成大写字符串
    使用Java怎么将小写字符串转换成大写字符串?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. An...
    99+
    2023-06-14
  • 使用Java如何实现转换金额的大小写
    这篇文章给大家介绍使用Java如何实现转换金额的大小写,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体内容如下 public class MoneyUtil { private static final S...
    99+
    2023-05-31
    java 大小转换 ava
  • 如何使用PHP将数组转化成JSON格式
    在Web开发中,经常需要将PHP的关联数组或数字索引数组转化成JSON格式,以便在前端页面显示或给API调用,这种需求在现代Web应用程序的开发中非常普遍。本篇文章将会告诉你如何使用PHP将数组转化成JSON格式。什么是JSON?JSON意...
    99+
    2023-05-14
  • PHP编程指南:如何用PHP将数字转换成中文大写
    【PHP编程指南:如何用PHP将数字转换成中文大写】 在使用PHP进行开发时,有时候需要将数字转换成中文大写,这在一些财务软件或者账单系统中尤为重要。本文将介绍如何使用PHP编写代码来...
    99+
    2024-04-02
  • 简述如何使用PHP将时间转化成时间戳
    PHP(Hypertext Preprocessor)是一种常用的服务器端脚本语言,可以用于动态网页开发以及企业级应用程序开发。在PHP中,经常需要进行时间格式处理,其中一种常见的任务是将时间转化成时间戳。在本文中,我们将介绍如何使用PHP...
    99+
    2023-05-14
  • linux中如何使用awk完成更多结构化的复杂任务
    这篇文章将为大家详细讲解有关linux中如何使用awk完成更多结构化的复杂任务,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。awk 的程序结构awk 脚本是由 {}(大括号)包围的功能...
    99+
    2023-06-15
  • 如何使用Python的upper()函数将字符串转换为大写
    如何使用Python的upper()函数将字符串转换为大写,需要具体代码示例Python是一种简单易学的编程语言,它提供了许多内置函数来处理字符串。其中一种常用的函数是upper()函数,它可以将字符串中的所有字母转换为大写形式。本文将详细...
    99+
    2023-11-18
    Python 字符串转换 upper()
  • 使用Java如何控制正则表达式中的大小写
    使用Java如何控制正则表达式中的大小写?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体如下:默认是:区分大小写的;传递标志参数:Pattern.CASE_INSENSI...
    99+
    2023-05-31
    java 正则表达式 ava
  • 如何使用Java和Laravel编写高效的大数据算法?
    随着大数据时代的到来,越来越多的企业开始关注和应用大数据技术。大数据技术对于企业来说是一种利器,能够帮助企业更好地理解用户需求、提升产品质量、提高市场竞争力。在大数据分析中,算法是非常重要的一部分,而Java和Laravel则是开发高效大数...
    99+
    2023-07-10
    laravel 大数据 编程算法
  • Python 与大数据的完美结合:如何使用 NumPy 优化数据处理?
    随着现代科技的发展,数据处理已经成为了各行各业的一个重要部分,而 Python 作为一种功能强大且易于学习的编程语言,已经成为了数据处理领域的热门选择。而在 Python 中,NumPy 库则是大数据处理领域的重要工具之一。本文将介绍 N...
    99+
    2023-10-03
    大数据 numpy unix
  • 如何在Java中使用索引来优化大数据查询?
    Java是一种非常流行的编程语言,可以用来处理大数据。在处理大量数据时,优化查询速度非常重要。使用索引是提高查询速度的一种方法。本文将介绍如何在Java中使用索引来优化大数据查询。 索引的概念 索引是一种数据结构,用于加快数据的查询速度...
    99+
    2023-07-20
    leetcode 索引 大数据
  • 如何使用Java和Shell编写高效的大数据处理程序?
    在当今数据时代,大数据处理已经成为了一项非常重要的任务。而在大数据处理中,Java和Shell是两种非常流行的编程语言。本文将介绍如何使用Java和Shell编写高效的大数据处理程序。 一、Java编写大数据处理程序 使用Java API...
    99+
    2023-07-26
    bash 大数据 shell
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作