首页 > 其他分享 >数字转中文

数字转中文

时间:2024-04-16 15:01:04浏览次数:23  
标签:中文 数字 int res builder num final String

网上抄的

package com.bdip.common.utils;

/**
 * @author gx
 * @date 20240327
 * 数字工具类
 * */
public class NumberUtil {

    /**
     * 转换阿拉伯数字到中文字符
     * @param num
     * @return
     */
    public static String cnNumConvertor(int num) {
        if (num==0) {
            return "零";
        }
        final String illegalPrefix = "一十";
        final String[] units = {"", "万", "亿", "兆"};
        String prefix = "";
        if (num < 0) {
            prefix = "负";
            num = -num;
        }
        String numStr = String.valueOf(num);
        final int metaLen = 4;
        int r = numStr.length() - 1;
        int l = Math.max(0, r - metaLen + 1);
        int unitIndex = 0;
        StringBuilder builder = new StringBuilder();
        while (r >= 0 && l >= 0) {
            builder.insert(0, cnNumMetaConvertor(numStr.substring(l, r + 1)) + units[unitIndex++]);
            r = l - 1;
            l = Math.max(0, r - metaLen + 1);
        }
        String res = builder.toString();
        if (res.startsWith(illegalPrefix)) {
            res = res.substring(1, res.length());
        }
        return prefix + res;
    }


    /**
     * 按照中文阅读习惯,处理最高4位的 meta 数字集
     *
     * @param num
     * @return
     */
    private static String cnNumMetaConvertor(String num) {
        final int metaLen = 4;
        final String zeroStr = "0";
        final String[] cnNums = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
        final String[] units = {"千", "百", "十", ""};
        StringBuilder builder = new StringBuilder();
        int N = num.length();
        boolean canNotJudge = N > metaLen || (N < metaLen && num.startsWith(zeroStr));
        if (canNotJudge) {
            return "";
        }
        boolean isPreZero = false;
        int unitIndex = metaLen - num.length() - 1;
        for (int i = 0; i < N; i++) {
            ++unitIndex;
            final int currNum = num.charAt(i) - '0';
            final String currNumCn = cnNums[currNum];
            final String currUnit = units[unitIndex];
            if (currNum == 0) {
                if (isPreZero) {
                    continue;
                }
                isPreZero = true;
                builder.append(currNumCn);
            } else {
                isPreZero = false;
                builder.append(currNumCn);
                builder.append(currUnit);
            }
        }
        String res = builder.toString();
        return res.endsWith("零") ? res.substring(0, res.length() - 1) : res;
    }

}

标签:中文,数字,int,res,builder,num,final,String
From: https://www.cnblogs.com/cnff/p/18138173

相关文章

  • WPF中文网随笔(1)
    前端代码的全称为ExtensibleApplicationMarkupLanguage,简称XAML;<Application.Resources></Application.Resources>前端代码中x:Class="HelloWorld.App",它定义一个名叫App的类型,这个类型位于命令空间HelloWorld之中,与后端代码的namespaceHelloWorld保持一致。我们可以......
  • Excel提取数字公式
    =LEFT(TEXTJOIN("",TRUE,FILTER(MID(C31,SEQUENCE(LEN(C31)),1),ISNUMBER(VALUE(MID(C31,SEQUENCE(LEN(C31)),1))))),3)假设你要从单元格A1中提取连续数字,你可以使用以下公式:excelCopyCode=TEXTJOIN("",TRUE,FILTER(MID(A1,ROW(INDIRECT("1:"&LEN......
  • 数字先锋 | 加“数”蝶变,打造政务服务“心温度”!
    近年来,5G、云计算、大数据等新兴数字技术的发展如火如荼,不断重塑着经济社会治理模式。与此同时,数字政务也成为加速数字化转型与信息安全保障的关键举措。在此背景下,四川省广安市积极开启政务国产化进程,不断提升自身履职能力与政务服务能力。通过携手天翼云,广安市打造了安全可靠的......
  • 1019 数字黑洞(stl)
    第一次知道sprintf这个函数,孤陋寡闻了。写法一,#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn; cin>>n;charcs[100];sprintf(cs,"%04d",n);inta=0,b=0;while(a-b!=6174){ sort(cs,cs+4,greater<char>());//降序......
  • BackTrader 中文文档(二十八)
    原文:www.backtrader.com/订单管理和执行原文:www.backtrader.com/blog/posts/2015-08-08-order-creation-execution/order-creation-execution/回测,因此backtrader,如果不能模拟订单,将不完整。为此,平台提供了以下功能。对于订单管理有3个原语:购买卖出取消注......
  • BackTrader 中文文档(二十九)
    原文:www.backtrader.com/开发一个指标原文:www.backtrader.com/blog/posts/2015-07-18-developing-an-indicator/developing-an-indicator/在对backtrader进行了大量的微调之后(因为它已经运行了一段时间),我决定不仅通过GitHub分享它,还要告诉世界它的存在,并在"Reddit"上发......
  • BackTrader 中文文档(二十一)
    原文:www.backtrader.com/目标订单原文:www.backtrader.com/blog/posts/2016-09-02-target-orders/target-orders/直到版本1.8.10.96,通过Strategy方法:买入和卖出,在backtrader上实现了智能的投注。一切都是关于向方程中添加一个Sizer,它负责赌注的大小。Sizer无法决定操作是......
  • BackTrader 中文文档(二十三)
    原文:www.backtrader.com/基准测试原文:www.backtrader.com/blog/posts/2016-07-22-benchmarking/benchmarking/backtrader包括两种不同类型的对象,可以帮助跟踪:观察者分析器问题#89是关于添加针对资产的基准测试。这是合理的,因为一个人可能实际上有一种策略,即使是......
  • BackTrader 中文文档(二十四)
    原文:www.backtrader.com/终极振荡器原文:www.backtrader.com/blog/posts/2016-06-22-ultimate-oscillator/ultimate-oscillator/当启动backtrader的开发时,其中一个目标是使其非常容易(至少对于作者本人来说)开发新的Indicators以测试数学和视觉上的想法。Ticket#102是关于将......
  • BackTrader 中文文档(二十五)
    原文:www.backtrader.com/Bid-Ask数据到OHLC原文:www.backtrader.com/blog/posts/2016-04-14-bidask-data-to-ohlc/bidask-data-to-ohlc/最近,backtrader通过实现线覆盖来执行了从ohlcland的逃逸,这允许重新定义整个层次结构,例如拥有仅包含bid、ask和datetime行的数据......