浮点型数字转换为中文人民币格式-Java


import java.util.Scanner;

/**
 * @author Green.Gee
 * @date 2022/12/26 14:00
 * @email green.gee.lu@gmail.com
 */
public class ConvertRMB {

    /**
     * 描述
     * 1、中文大写金额数字前应标明“人民币”字样。
     * 中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。
     * <p>
     * 2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,
     * 如532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。
     * <p>
     * 3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,
     * 如6007.14,应写成“人民币陆仟零柒元壹角肆分“。
     * <p>
     * 4、10应写作“拾”,100应写作“壹佰”。
     * 例如,1010.00应写作“人民币壹仟零拾元整”,110.00应写作“人民币壹佰拾元整”
     * <p>
     * 5、十万以上的数字接千不用加“零”,
     * 例如,30105000.00应写作“人民币叁仟零拾万伍仟元整”
     * <p>
     * 输入描述:
     * 输入一个double数
     * <p>
     * 输出描述:
     * 输出人民币格式
     * <p>
     * 示例1
     * 输入:
     * 151121.15
     * 复制
     * 输出:
     * 人民币拾伍万壹仟壹佰贰拾壹元壹角伍分
     * 复制
     * 示例2
     * 输入:
     * 1010.00
     * 复制
     * 输出:
     * 人民币壹仟零拾元整
     */
    static String[] rmb_nums = {
            "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾"
    };

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String[] rmb = in.nextLine().split("\\.");
            if (rmb.length == 2) {
                String prefix = prefixHandle(rmb[0]);
                String suffix = suffixHandle(rmb[1]);
                System.out.println(prefix + suffix);
            }
        }
    }

    private static String prefixHandle(String prefix) {
        StringBuffer prefixStr = new StringBuffer("人民币");
        long num = Long.parseLong(prefix);
        if (num / 100000000 >= 1) {
            long yi = num / 100000000;
            long yi_rest = num % 100000000;
            System.out.println(yi_rest);


        } else if (num / 10000 >= 1) {
            long wan = num / 10000;
            if (wan >= 1000) {
                long wan_unit = wan / 1000;
                prefixStr.append(rmb_nums[(int) wan_unit]).append("仟");
                long wan_unit_rest = wan % 1000;
                if (wan_unit_rest >= 1) {
                    if (wan_unit_rest >= 100) {
                        long bai = wan_unit_rest / 100;
                        prefixStr.append(rmb_nums[(int) bai]).append("佰");
                        if (wan_unit_rest % 100 != 0) {
                            long bai_rest = wan_unit_rest % 100;
                            if (bai_rest >= 10) {
                                long shi = bai_rest / 10;
                                if (shi == 1) {
                                    prefixStr.append("拾");
                                } else {
                                    prefixStr.append(rmb_nums[(int) shi]);
                                    prefixStr.append("拾");
                                }
                                if (bai_rest % 10 != 0) {
                                    long shi_rest = shi % 10;
                                    prefixStr.append(rmb_nums[(int) shi_rest]).append("万");
                                } else {
                                    prefixStr.append("万");
                                }
                            } else {
                                prefixStr.append("零");
                                prefixStr.append(rmb_nums[(int) bai_rest]).append("万");
                            }
                        } else {
                            prefixStr.append("万");
                        }
                    } else if (wan_unit_rest >= 10) {
                        prefixStr.append("零");
                        long shi = wan_unit_rest / 10;
                        if (shi == 1) {
                            prefixStr.append("拾");
                        } else {
                            prefixStr.append(rmb_nums[(int) shi]);
                            prefixStr.append("拾");
                        }
                        if (wan_unit_rest % 10 != 0) {
                            long shi_rest = wan_unit_rest % 10;
                            prefixStr.append(rmb_nums[(int) shi_rest]).append("万");
                        } else {
                            prefixStr.append("万");
                        }
                    } else {
                        prefixStr.append("零");
                        prefixStr.append(rmb_nums[(int) wan_unit_rest]).append("万");
                    }
                } else {
                    prefixStr.append("万");
                }
            } else if (wan >= 100) {
                long wan_unit = wan / 100;
                prefixStr.append(rmb_nums[(int) wan_unit]).append("佰");
                if (wan % 100 != 0) {
                    long wan_rest = wan % 100;
                    if (wan_rest >= 10) {
                        long shi = wan_rest / 10;
                        if (shi == 1) {
                            prefixStr.append("拾");
                        } else {
                            prefixStr.append(rmb_nums[(int) shi]);
                            prefixStr.append("拾");
                        }
                        if (wan_rest % 10 != 0) {
                            long shi_rest = shi % 10;
                            prefixStr.append(rmb_nums[(int) shi_rest]).append("万");
                        } else {
                            prefixStr.append("万");
                        }
                    } else {
                        prefixStr.append("零");
                        prefixStr.append(rmb_nums[(int) wan_rest]).append("万");
                    }
                } else {
                    prefixStr.append("万");
                }
            } else if (wan >= 10) {
                long shi = wan / 10;
                if (shi == 1) {
                    prefixStr.append("拾");
                } else {
                    prefixStr.append(rmb_nums[(int) shi]).append("拾");
                }
                if (wan % 10 != 0) {
                    long shi_rest = wan % 10;
                    prefixStr.append(rmb_nums[(int) shi_rest]).append("万");
                } else {
                    prefixStr.append("万");
                }
            } else {
                prefixStr.append(rmb_nums[(int) wan]).append("万");
            }

            // 万后缀
            long wan_rest = num % 10000;
            if (wan_rest >= 1) {
                if (wan_rest >= 1000) {
                    long wan_qian = wan_rest / 1000;
                    prefixStr.append(rmb_nums[(int) wan_qian]).append("仟");
                    long wan_unit_rest = wan_rest % 1000;
                    if (wan_unit_rest >= 1) {
                        if (wan_unit_rest >= 100) {
                            long wan_unit = wan_unit_rest / 100;
                            prefixStr.append(rmb_nums[(int) wan_unit]).append("佰");
                            if (wan_rest % 100 != 0) {

                                long wan_bai_rest = wan_rest % 100;
                                if (wan_bai_rest >= 10) {
                                    long shi = wan_bai_rest / 10;
                                    if (shi == 1) {
                                        prefixStr.append("拾");
                                    } else {
                                        prefixStr.append(rmb_nums[(int) shi]);
                                        prefixStr.append("拾");
                                    }
                                    if (wan_bai_rest % 10 != 0) {
                                        long shi_rest = wan_bai_rest % 10;
                                        prefixStr.append(rmb_nums[(int) shi_rest]).append("元");
                                    } else {
                                        prefixStr.append("元");
                                    }
                                } else {
                                    prefixStr.append("零");
                                    prefixStr.append(rmb_nums[(int) wan_rest]).append("元");
                                }

                            } else {
                                prefixStr.append("元");
                            }
                        } else if (wan_unit_rest >= 10) {
                            prefixStr.append("零");
                            long wan_unit_rest_shi = wan_unit_rest / 10;
                            if (wan_unit_rest_shi == 1) {
                                prefixStr.append("拾");
                            } else {
                                prefixStr.append(rmb_nums[(int) wan_unit_rest_shi]).append("拾");
                            }
                            if (wan_unit_rest % 10 != 0) {
                                long shi_rest = wan_unit_rest % 10;
                                prefixStr.append(rmb_nums[(int) shi_rest]).append("元");
                            } else {
                                prefixStr.append("元");
                            }
                        } else {
                            prefixStr.append("零");
                            prefixStr.append(rmb_nums[(int) wan_unit_rest]).append("元");
                        }
                    } else {
                        prefixStr.append("元");
                    }

                } else if (wan_rest >= 100) {
                    prefixStr.append("零");
                    long wan_unit = wan_rest / 100;
                    prefixStr.append(rmb_nums[(int) wan_unit]).append("佰");
                    if (wan_rest % 100 != 0) {
                        long wan_bai_rest = wan_rest % 100;
                        if (wan_bai_rest >= 10) {
                            long shi = wan_bai_rest / 10;
                            if (shi == 1) {
                                prefixStr.append("拾");
                            } else {
                                prefixStr.append(rmb_nums[(int) shi]);
                                prefixStr.append("拾");
                            }
                            if (wan_bai_rest % 10 != 0) {
                                long shi_rest = wan_bai_rest % 10;
                                prefixStr.append(rmb_nums[(int) shi_rest]).append("元");
                            } else {
                                prefixStr.append("元");
                            }
                        } else {
                            prefixStr.append("零");
                            prefixStr.append(rmb_nums[(int) wan_rest]).append("元");
                        }
                    } else {
                        prefixStr.append("元");
                    }


                } else if (wan_rest >= 10) {
                    prefixStr.append("零");
                    long shi = wan_rest / 10;
                    if (shi == 1) {
                        prefixStr.append("拾");
                    } else {
                        prefixStr.append(rmb_nums[(int) shi]);
                        prefixStr.append("拾");
                    }
                    if (wan_rest % 10 != 0) {
                        long shi_rest = wan_rest % 10;
                        prefixStr.append(rmb_nums[(int) shi_rest]).append("元");
                    } else {
                        prefixStr.append("元");
                    }
                } else {
                    prefixStr.append("零");
                    prefixStr.append(rmb_nums[(int) wan_rest]).append("元");
                }
            } else {
                prefixStr.append("零");
                prefixStr.append("元");
            }
        } else if (num / 1000 >= 1) {
            qian_append(prefixStr, num);
        } else if (num / 100 >= 1) {
            bai_append(prefixStr, num);
        } else if (num / 10 >= 1) {
            long shi = num / 10;
            shi_append(prefixStr, shi, num);
        } else {
            if (num != 0) {
                prefixStr.append(rmb_nums[(int) num]).append("元");
            }
        }
        return prefixStr.toString();
    }


    static void qian_append(StringBuffer prefixStr, long num) {
        long qian = num / 1000;
        prefixStr.append(rmb_nums[(int) qian]).append("仟");
        long qian_rest = num % 1000;
        if (qian_rest >= 1) {
            if (qian_rest >= 100) {
                bai_append(prefixStr, qian_rest);
            } else if (qian_rest >= 10) {
                prefixStr.append("零");
                long qian_shi_rest = qian_rest / 10;
                shi_append(prefixStr, qian_shi_rest, qian_rest);
            } else {
                prefixStr.append("零");
                prefixStr.append(rmb_nums[(int) qian_rest]).append("元");
            }
        } else {
            prefixStr.append("元");
        }
    }


    static void bai_append(StringBuffer prefixStr, long num) {
        long bai = num / 100;
        prefixStr.append(rmb_nums[(int) bai]).append("佰");
        if (num % 100 != 0) {
            long bai_rest = num % 100;
            if (bai_rest >= 10) {
                long bai_rest_shi = bai_rest / 10;
                shi_append(prefixStr, bai_rest_shi, bai_rest);
            } else {
                prefixStr.append("零");
                prefixStr.append(rmb_nums[(int) bai_rest]).append("元");
            }
        } else {
            prefixStr.append("元");
        }
    }

    static void shi_append(StringBuffer prefixStr, long shi, long num) {
        if (shi == 1) {
            prefixStr.append("拾");
        } else {
            prefixStr.append(rmb_nums[(int) shi]);
            prefixStr.append("拾");
        }
        ge_append(prefixStr, num);
    }

    static void ge_append(StringBuffer prefixStr, long num) {
        if (num % 10 != 0) {
            long shi_rest = num % 10;
            prefixStr.append(rmb_nums[(int) shi_rest]).append("元");
        } else {
            prefixStr.append("元");
        }
    }

    static String suffixHandle(String suffixStr) {
        StringBuffer suffix = new StringBuffer();
        char jiao = suffixStr.charAt(0);
        char fen = suffixStr.charAt(1);
        int i = Integer.parseInt(jiao + "");
        int j = Integer.parseInt(fen + "");
        if (jiao == '0' && fen == '0') {
            suffix.append("整");
        } else if (jiao != '0' && fen != '0') {
            suffix.append(rmb_nums[i]).append("角").append(rmb_nums[j]).append("分");
        } else if (jiao != '0') {
            suffix.append(rmb_nums[i]).append("角");
        } else {
            suffix.append(rmb_nums[j]).append("分");
        }
        return suffix.toString();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

P("Struggler") ?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值