【java金额输入转换】任意字符串转为Long型金额(单位:分)

导读:本篇文章讲解 【java金额输入转换】任意字符串转为Long型金额(单位:分),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

package com.tuwer;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Objects;

/**
 * @author 土味儿
 * Date 2022/11/7
 * @version 1.0
 */
@SpringBootTest
public class MyTest {
    private Long getPriceOfFen(String moneyStr) {
        if (Objects.isNull(moneyStr) || moneyStr.length() < 1) {
            return 0L;
        }

        // 合法字符
        String model = ".0123456789";
        // 如果有。时,把 。替换为小数点.
        moneyStr = moneyStr.replaceAll("\\。", "\\.");
        // 去除非法字符
        StringBuilder newMoneyBuilder = new StringBuilder();
        for (int i = 0; i < moneyStr.length(); i++) {
            char c = moneyStr.charAt(i);
            // 判断当前字符是否合法
            int b = model.indexOf(c);
            if (b >= 0) {
                newMoneyBuilder.append(c);
            }
        }
        // 新的金额字符串;不含非法字符
        String newMoney = newMoneyBuilder.toString();
        if (newMoney.length() < 1) {
            return 0L;
        }

        // 整数、小数部分
        Long x, y;

        // 是否有小数点.
        int a = newMoney.indexOf(".");

        // 有小数点,且小数点不在第一位
        if (a > 0) {
            // 整数部分
            x = Long.parseLong(newMoney.substring(0, a));
            // 小数部分
            // 取小数点及后面的所有字符(可能有多个小数点)
            String l = newMoney.substring(a);
            // 把所有小数点替换为空
            l = l.replaceAll("\\.", "");
            // 如果l的长度大小2时,只取两位
            if (l.length() > 2) {
                l = l.substring(0, 2);
            }
            if (l.length() < 1) {
                l = "0";
            }
            if(l.length() == 1){
                l = l + "0";
            }
            y = Long.parseLong(l);
        }
        // 有小数点,且小数点在第一位
        else if (a == 0) {
            x = 0L;
            // 把所有小数点替换为空
            newMoney = newMoney.replaceAll("\\.", "");
            // 如果newMoney的长度大小2时,只取两位
            if (newMoney.length() > 2) {
                newMoney = newMoney.substring(0, 2);
            }
            if (newMoney.length() < 1) {
                newMoney = "0";
            }
            if (newMoney.length() == 1) {
                newMoney = newMoney + "0";
            }
            y = Long.parseLong(newMoney);
        }
        // 没有小数点
        else {
            x = Long.parseLong(newMoney);
            y = 0L;
        }

        // 元转为分
        return x * 100 + y;
    }

    @Test
    public void test() {
        String m = "d w s 在人枯002.13des.322dk ls w s 。不髑要人要";

        System.out.println("【原始字符串】" + m);
        System.out.println("【转换后】" + getPriceOfFen(m));
    }
}

【原始字符串】d w s 在人枯002.13des.322dk ls w s 。不髑要人要
【转换后】213

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/70372.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!