首页 > 其他分享 >将阿拉伯数字转换为中文大写形式(金额模式)

将阿拉伯数字转换为中文大写形式(金额模式)

时间:2024-12-25 21:09:19浏览次数:6  
标签:中文 CN int 阿拉伯数字 大写 money sb append String

来自豆包,靠谱

import java.math.BigDecimal;
import java.math.RoundingMode;

public class MoneyToChiness {
    private static final String[] CN_UPPER_NUMBER = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    private static final String[] CN_UPPER_UNIT = {"", "拾", "佰", "仟"};
    private static final String[] CN_GROUP = {"", "万", "亿"};

    public static String moneyToChinese(BigDecimal i_money) {
        if (i_money.equals(BigDecimal.ZERO)) {
            return "零圆整";
        }
        Double max = 1000000000000D;
        Double min = 0.01D;
        if (i_money.doubleValue() >= max || i_money.doubleValue() < min) {
            return "大于1万亿或小于1分了";
        }
        i_money = i_money.setScale(2, RoundingMode.HALF_UP);
        String numStr = i_money.toString();
        int pointPos = numStr.indexOf('.');
        String s_int = null;
        String s_point = null;
        if (pointPos >= 0) {
            s_int = numStr.substring(0, pointPos);
            s_point = numStr.substring(pointPos + 1);
        } else {
            s_int = numStr;
        }
        StringBuilder sb = new StringBuilder();
        if ("0".equals(s_int)) {
            sb.append("零元整");
        } else {
            int groupCount = (int) Math.ceil(s_int.length() / 4.0);
            for (int group = 0; group < groupCount; group++) {
                boolean zeroFlag = true;
                boolean noZeroFlag = false;
                int start = (s_int.length() % 4 == 0? 0 : (s_int.length() % 4 - 4)) + 4 * group;
                for (int i = 0; i < 4; i++) {
                    if (i + start >= 0) {
                        int value = s_int.charAt(i + start) - '0';
                        if (value > 0) {
                            sb.append(CN_UPPER_NUMBER[value]);
                            if (i < 3) {
                                sb.append(CN_UPPER_UNIT[i]);
                            }
                            zeroFlag = true;
                            noZeroFlag = true;
                        } else if (zeroFlag) {
                            sb.append('零');
                            zeroFlag = false;
                        }
                    }
                }
                if (sb.charAt(sb.length() - 1) == '零') {
                    sb.deleteCharAt(sb.length() - 1);
                }
                if (noZeroFlag || groupCount - group == 1) {
                    sb.append(CN_GROUP[groupCount - group - 1]);
                }
            }
            sb.append('元');
            if (s_point == null || "00".equals(s_point)) {
                sb.append('整');
            } else {
                int j = s_point.charAt(0) - '0';
                int f = s_point.charAt(1) - '0';
                sb.append(CN_UPPER_NUMBER[j]).append('角');
                sb.append(CN_UPPER_NUMBER[f]).append('分');
            }
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        BigDecimal amount = new BigDecimal("1234.56");
        System.out.println(moneyToChinese(amount));
    }
}

 

标签:中文,CN,int,阿拉伯数字,大写,money,sb,append,String
From: https://www.cnblogs.com/luodengxiong/p/18631409

相关文章

  • Fiddler v5.0.2专业网络抓包工具简体中文版
    点击上方蓝字关注我前言Fiddler抓包工具一个非常专业且已经翻译成中文的网络调试帮手。它就像一个超级监视器,能帮你看到电脑和互联网之间所有通过HTTP协议传输的信息。比如,当你在网上冲浪时,它可以记录下你和网站之间交换的所有“小纸条”,比如网页上的小饼干(cookie)、文字说明(HTML......
  • 【亲测能用】专业音乐制作软件Ableton Live Suite v12.1.5 中文版(附安装教程)
    软件介绍在数字音频工作站(DAW)的领域中,AbletonLive以其创新和灵活性脱颖而出,成为全球音乐家和制作人的首选工具。由德国Ableton公司精心打造,这款软件不仅支持无缝的音乐播放和即时编辑,还提供了强大的音频效果和虚拟乐器,让音乐创作变得无限可能。功能亮点AbletonLive12.1.5版......
  • kafka中文教程
    kafka中文教程|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|-------------|----------......
  • GitLab中文版正式发布最新的 17.7 版本
    沿袭我们的月度发布传统,极狐GitLab发布了17.7版本,该版本带来了通过特定MRLabel实现Mono场景下多仓MR的关联(JH-only)、新的计划者用户角色、在UI上轮换个人、项目及群组访问令牌等几十个重点功能的改进。下面是部分重点功能的详细解读。关于极狐GitLab的安装升级,可以......
  • 文字游戏——“改写”文本(中文•Python)
    调整语序、增减字数、替换同义词等方式,避免与原文出现连续八个字相同的句子,使这段话更加有逻辑。(笔记模板由python脚本于2024年12月23日12:23:12创建,本篇笔记适合喜欢中文的coder翻阅)【学习的细节是欢悦的历程】Python官网:https://www.python.org/Free:大咖......
  • NLP 中文拼写检测纠正论文-01-介绍了SIGHAN 2015 包括任务描述,数据准备, 绩效指标和评
    拼写纠正系列NLP中文拼写检测实现思路NLP中文拼写检测纠正算法整理NLP英文拼写算法,如果提升100W倍的性能?NLP中文拼写检测纠正Paperjava实现中英文拼写检查和错误纠正?可我只会写CRUD啊!一个提升英文单词拼写检测性能1000倍的算法?单词拼写纠正-03-leetcodeedit-d......
  • Promise/A+ 规范 - 中文版本
    Promises/A+这是一个开放标准,旨在让不同开发者实现的JavaScriptPromise能够无缝衔接并应用——由前辈们制定,为其他后来者提供参考一个promise所表示的是异步操作的结果。与promise交互的主要方式是通过它的then方法,该方法会注册所传入的回调函数,回调函数将接收promi......
  • xshell中文乱码问题
    1.修改环境变量修改bashrc文件,即:vi~/.bashrc,具体修改内容如下:exportLANG="zh_CN.UTF-8"再激活环境变量即可,命令行:source~/.bashrc。如果没有解决,请看继续看2.2.修改终端设置修改Xshell终端设置,点击defaultsession进行设置,terminal选项设置encoding为UTF-8......
  • DevExpress WPF中文教程:Grid - 如何移动和调整列大小?(二)
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • Windows11轻松设置(Win11一键优化) v1.10 中文绿色版
    软件介绍Windows11轻松设置软件是一款专门为Windows11系统设计的工具软件,具有多种特色功能和亮点。通过界面简洁、个性化定制、一键优化等功能,可以帮助用户更加便捷地进行系统设置和管理。同时,该软件的多种主题、系统优化、智能提示等特点也受到用户的欢迎。总之,Windows11轻松......