Java maneja la conversión de casos de cantidad

Escenario: muchas veces nuestros escenarios comerciales involucran montos y necesitamos manejar casos de conversión de montos, como el monto que se muestra en facturas electrónicas, el monto que se muestra en pólizas de seguro electrónicas, etc. ¿Cómo podemos usar el código Java para convertir esto de manera elegante y sencilla? ¿fácilmente? Este también es un muy buen tema relacionado con estructuras de datos y algoritmos, y vale la pena estudiar las ideas detenidamente.

 /**
     * 大小写金额转换
     * @param n
     * @return
     */
    public static String digitUppercase(double n) {
    
    
        String fraction[] = {
    
     "角", "分" };
        String digit[] = {
    
     "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
        String unit[][] = {
    
     {
    
     "元", "万", "亿" }, {
    
     "", "拾", "佰", "仟" } };

        String head = n < 0 ? "负" : "";
        n = Math.abs(n);

        String s = "";
        for (int i = 0; i < fraction.length; i++) {
    
    
            //优化double计算精度丢失问题
            BigDecimal nNum = new BigDecimal(n);
            BigDecimal decimal = new BigDecimal(10);
            BigDecimal scale = nNum.multiply(decimal).setScale(2, RoundingMode.HALF_EVEN);
            double d = scale.doubleValue();
            s += (digit[(int) (Math.floor(d * Math.pow(10, i)) % 10)] + fraction[i])
                    .replaceAll("(零.)+", "");
        }
        if (s.length() < 1) {
    
    
            s = "整";
        }
        int integerPart = (int) Math.floor(n);

        for (int i = 0; i < unit[0].length && integerPart > 0; i++) {
    
    
            String p = "";
            for (int j = 0; j < unit[1].length && n > 0; j++) {
    
    
                p = digit[integerPart % 10] + unit[1][j] + p;
                integerPart = integerPart / 10;
            }
            s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i]
                    + s;
        }
        return head
                + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "")
                .replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
    }

prueba:

 public static void main(String[] args) {
    
    
        System.out.println(digitUppercase(124.4));
    }

resultado:

壹佰贰拾肆元肆角

Supongo que te gusta

Origin blog.csdn.net/weixin_47061482/article/details/132056651
Recomendado
Clasificación