`

将数字转换成中文字符串

阅读更多
将数字转换成中文字符串

-----------------
RMBUtil.java
public class RMBUtil
{
    private static final String number[] = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
    private static final String unit[]   = { "十", "百", "千", "万", "亿" };

    public static void main(String[] args)
    {
        System.out.println(num2CN(0));
        System.out.println(num2CN(-10));
        System.out.println(num2CN(-0));
        System.out.println(num2CN(9));
        System.out.println(num2CN(10));
        System.out.println(num2CN(99));
        System.out.println(num2CN(100));
        System.out.println(num2CN(999));
        System.out.println(num2CN(1000));
        System.out.println(num2CN(9999));
        System.out.println(num2CN(10000));
        System.out.println(num2CN(99999));
        System.out.println(num2CN(100000));
        System.out.println(num2CN(999999));
        System.out.println(num2CN(1010101010));
        System.out.println(num2CN(1100110011));
        System.out.println(num2CN(1000000001));
        System.out.println(num2CN(1000000000));
    }

    public static String num2CN(int value)
    {
        return map2CNValue(value);
    }

    private synchronized static String map2CNValue(int value)
    {
        sb = new StringBuffer();
        map2Num(mapSign(value));
        String s = sb.toString();

        if (s.length() > 1)
        {
            s = map2NatureLang(s);
        }

        // 处理 -号
        if (sign == -1)
        {
            s = "负" + s;
        }

        return s;
    }

    private static String mapSign(int value)
    {
        if (value < 0)
        {
            sign = -1;
        }
        else if (value > 0)
        {
            sign = 1;
        }
        else
        {
            sign = 0;
        }

        return String.valueOf(Math.abs(value));
    }

    private static void map2Num(final String num)
    {
        int length = num.length();
        if (length <= 12 && length >= 10)
        {
            mapFirst2Num(num);
            sb.append(unit[length - 10] + unit[4]);
            map2Num(num.substring(1));
        }
        else if (length == 9)
        {
            mapFirst2Num(num);
            sb.append(unit[4]);
            map2Num(num.substring(1));
        }
        else if (length <= 8 && length >= 6)
        {
            mapFirst2Num(num);
            sb.append(unit[length - 6] + unit[3]);
            map2Num(num.substring(1));
        }
        else if (length <= 5 && length >= 2)
        {
            mapFirst2Num(num);
            sb.append(unit[length - 2]);
            map2Num(num.substring(1));
        }
        else if (length == 1)
        {
            mapFirst2Num(num);
        }
    }

    private static void mapFirst2Num(final String num)
    {
        String s = num.substring(0, 1);
        int i = Integer.valueOf(s).intValue();
        sb.append(number[i]);
    }

    private static String map2NatureLang(final String num)
    {
        String s = num;

        // 简读零位
        s = s.replaceAll("零[千百十]*[亿万]*", "零");
        s = s.replaceAll("零+", "零");

        // 简读亿位万位
        int i = s.split("亿").length - 1;
        int j = s.split("万").length - 1;
        while (i > 1)
        {
            s = s.replaceFirst("亿", "");
            i--;
        }
        while (j > 1)
        {
            s = s.replaceFirst("万", "");
            j--;
        }

        // 简读开头"一十为十"
        s = s.replaceFirst("^一十", "十");

        // 省读未尾零
        s = s.replaceAll("零+$", "");

        // 省读相邻零位
        s = s.replaceAll("(亿)(零)([一二三四五六七八九])(千)", "$1$3$4");
        s = s.replaceAll("(万)(零)([一二三四五六七八九])(千)", "$1$3$4");
        s = s.replaceAll("(千)(零)([一二三四五六七八九])(百)", "$1$3$4");
        s = s.replaceAll("(百)(零)([一二三四五六七八九])(十)", "$1$3$4");

        return s;
    }

    private static StringBuffer sb;
    private static int          sign = 0;

}
 
 
 


零
负十
零
九
十
九十九
一百
九百九十九
一千
九千九百九十九
一万
九万九千九百九十九
十万
九十九万九千九百九十九
十亿一千零一十万一千零一十
十一亿零一十一万零一十一
十亿零一
十亿


分享到:
评论

相关推荐

    java将字符串中数字转换为中文大写,在输出字符串

    java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字...

    TIA博途中字符串转换相关指令的使用方法(一).docx

    例如,将字符串转换为数字值参数 IN 中的数值数据类型为 STRING,WSTRING;参数 OUT 中数值的数据类型为 CHAR,WCHAR,USINT,UINT,UDINT,SINT,INT,DINT,REAL,LREAL。 2. 字符串和数值相互进行转换指令 字符...

    16进制数转化成字符串(包括中文)

    java代码,从16进制数直接转化成字符串(包括中文)简单好用

    C# 字符串转十六进制串,16进制反向转回原字符串

    要将字符串转换为十六进制串,我们需要对字符串中的每个字符进行编码,然后将编码结果转换成十六进制字符串。C#提供了`BitConverter`类和`ToString`方法来完成这个任务: ```csharp public static string StringTo...

    labview字符串拆分到数组 支持中文1

    在LabVIEW中处理字符串是一项常见的任务,尤其是将一个字符串拆分成多个子字符串,这通常涉及到字符串的分割操作。本篇将详细介绍如何在LabVIEW中实现“字符串拆分到数组”并支持中文字符。 一、字符串拆分的基本...

    字符串转ASCII ASCII转字符串

    相反,如果我们有一系列ASCII值,想要组合成一个字符串,可以逐个将这些值用`chr()`函数转换,然后连接起来。在Python中,可以使用列表推导式和`join()`函数来实现。 ```python # Python示例 ascii_values = [65, ...

    JavaScript实现把数字转换成中文

    JavaScript 实现数字转换成中文是一种常见的编程需求,特别是在处理金融、会计等领域,中文数字的表示方式更加直观且符合中文阅读习惯。以下是一个简单的 JavaScript 函数,用于将阿拉伯数字转换为中文数字。 首先...

    中文数字转成阿拉伯数字 java 实现

    在Java编程语言中,将中文数字转换为阿拉伯数字是一个常见的需求,特别是在处理中文文本数据时。这个场景下,我们有一个名为“中文数字转成阿拉伯数字 java 实现”的压缩包,包含了一个实现此功能的Java包和一个单元...

    java字符串类型数字设置千分位分隔

    创建一个`DecimalFormat`实例后,我们可以使用`format()`方法将数字转换为字符串。 下面是一个简单的示例,展示了如何使用`DecimalFormat`设置千分位分隔: ```java import java.text.DecimalFormat; public ...

    ascii码 与 字符串 相互转化

    ascii码 与 字符串 相互转化 ascii码 与 字符串 相互转化 ascii码 与 字符串 相互转化

    DB2字符串处理 字符串处理 db2 函数

    在 ASCII() 函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。 * CHAR() 函数:将 ASCII 码转换为字符。如果没有输入 0 ~ 255 之间的 ASCII 码值,CHAR() 函数返回 ...

    获取中文字符串长度的函数(VB6.0代码编写)

    在VB6.0编程环境中,处理中文字符串时,我们经常会遇到一个问题:如何准确地计算一个包含中文字符的字符串的长度。由于中文字符占用的字节数不同于英文字符(每个中文字符通常占用2个字节,而英文字符占用1个字节)...

    C++将文本字符串转换成BMP图片

    本篇文章将深入探讨如何使用C++编程语言将文本字符串转换成BMP(Bitmap)图片。 首先,我们需要了解BMP文件格式。BMP是Windows操作系统中常见的位图文件格式,它存储的是未经压缩的像素数据,包括图像宽度、高度、...

    VB6.0从一串字符中只提取数字

    在VB6.0(Visual Basic 6.0)中,我们经常遇到需要从一串混合的字符中提取出数字的情况。这可能涉及到处理用户输入、...通过学习和理解这段代码,你将能够更好地掌握在VB6.0中处理字符串和数字的方法,提高编程能力。

    java字符串的各种编码转换

    根据提供的文件信息,本文将详细解释Java中字符串的不同编码转换方法及原理,并深入探讨每种编码格式的特点。 ### Java字符串的编码转换 在Java中,处理不同字符集之间的字符串转换是一项常见任务。尤其是在处理...

    java将数字转换成大写字母

    Java 中实现数字金额到中文大写字符的转换是指将阿拉伯数字转换成中文大写的过程。本文将详细介绍 Java 实现数字金额到中文大写字符的转换的知识点。 知识点一: 数字金额到中文大写字符的转换的需求 在实际应用中...

    字符串和16进制转换源码 string 和 HEX 支持汉字

    本篇文章将深入探讨如何在支持汉字的情况下,利用源码实现字符串与十六进制值之间的转换。首先,我们需要理解字符串和十六进制的基础概念。 字符串是由一个或多个字符组成的序列,通常用于表示文本信息,包括字母、...

    字符串十六进制转换工具(包含ANSI和UNICODE)

    此外,这个工具对于查看或分析二进制文件的内容也非常有用,因为它允许我们将难以直接读取的二进制数据转化为可读的字符串形式。 总之,"字符串十六进制转换工具(包含ANSI和UNICODE)"是一个强大且实用的辅助工具,...

    13InstallShield内部库函数全集十三-字符串函数(中文版).rar

    8. **字符串转换**:如`ToUpperCase`和`ToLowerCase`用于将字符串转换为大写或小写,`Trim`用于去除字符串两端的空白字符。 每个函数都详细阐述了其语法、参数和返回值,配合实例代码,使得学习和应用变得更加直观...

    截取指定长度的字符串

    而在一些其他语言中,如Java,可能需要先将字符串转换为特定的字符编码(如UTF-8)再进行截取。 在实际应用中,我们可能还需要考虑一些边缘情况,例如当截取的长度超过了字符串的实际长度,这时通常会返回整个字符...

Global site tag (gtag.js) - Google Analytics