将一个浮点数转换成人民币读法字符串

本文介绍了如何使用Java编程将浮点数拆分为整数和小数部分,并针对中国的数字习惯,将4位的数字转换为汉字字符串,包括元、万元和亿元等单位。
摘要由CSDN通过智能技术生成

        首先把这个浮点数分成整数部分和小数部分。提取整数部分很容易,直接将这个浮点数强制类型转换成一个整数即可,这个整数就是浮点数的整数部分;再使用浮点数减去整数,就可以得到这个浮点数的小数部分。
       然后分开处理整数部分和小数部分,其中对小数部分的处理比较简单,直接截断保留2位数字,转换成几角几分的字符串。对整数部分的处理则稍微复杂一点儿,但只要认真分析不难发现,中国的数字习惯是4位一节的,一个4位的数字可被转换成几千几百几十几,至于后面添加什么单位则不确定,如果这一节4位数字出现在1~4位,则后面添加单位“元”;如果这一节4位数字出现在5~8位,则后面添加单位“万元”;如果这一节4位数字出现在9~12位,则后面添加单位“亿元”;多于12位就暂不考虑了。

package com.xing.controller;

import java.util.Arrays;

public class RMB {
    private String[] hanArr = {"零", "壹", "贰", "叁", "肆",
            "伍", "陆", "柒", "捌", "玖"};
    private String[] unitArr = {"元","十", "百", "千","万","十", "百",
            "千","亿","十", "百", "千"};
    private String[] XiaoUnitArr = {"角","分"};
    /**
     * 将一个浮点数分解成整数部分和小数部分
    * @param num 需要被分解的浮点数
    * @return 分解出来的整数部分和小数部分。第一个数组元素是整数部分,第二个数组元素是小数部分
     */
    private String[] divide(double num)
    {
        // 将一个浮点数强制类型转换为long类型,即得到它的整数部分
        var zheng = (long) num;
        // 浮点数减去整数部分,得到小数部分,小数部分乘以100后再取整得到2位小数
        var xiao = Math.round((num - zheng) * 100);
        // 下面用了两种方法把整数转换为字符串
        return new String[] {zheng + "", String.valueOf(xiao)};
    }
   /**
           * 将一个4位的数字字符串变成汉字字符串
    * @param numStr 需要被转换的4位的数字字符串
    * @return 4位的数字字符串被转换成汉字字符串
    */
    private String toHanStr(String[] numStr)
    {
        var result = "";
        int numLen = numStr[0].length();
        // 依次遍历数字字符串的每一位数字
        for (var i = 0; i < numLen; i++)
        {
            // 把char类型的数字转换成int类型的数字。由于它们的ASCII码值恰好相差48
            // 因此把char类型的数字减去48得到int类型的数字,例如,'4’被转换成4
            var num = numStr[0].charAt(i) - 48;
            // 如果数字不是0,则需要添加单位(千、百、十)
            if ( num != 0)
            {
                result += hanArr[num] + unitArr[numLen -1- i];
            }
        }
        for (int i = 0; i < 2; i++) {
            var num = numStr[1].charAt(i) - 48;
            result += hanArr[num] + XiaoUnitArr[i];
        }
        return result;
    }
    public static void main(String[] args)
    {
        var nr = new RMB();
        String[] divide = nr.divide(236711125.123);
        // 测试把一个浮点数分解成整数部分和小数部分
        System.out.println(Arrays.toString(nr.divide(236711125.123)));
        // 测试把一个4位的数字字符串变成汉字字符串
        System.out.println(nr.toHanStr(divide));
    }
}

测试结果:

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值