`
流浪鱼
  • 浏览: 1684757 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

金额格式转换

    博客分类:
  • java
 
阅读更多

 

 

import java.math.BigDecimal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @ 金额格式转换.
 */
public class AmountUtil {

    private static final BigDecimal MAG = BigDecimal.valueOf(1000);
    private static final BigDecimal MAG4 = BigDecimal.valueOf(10000);
    /**
     * 保留小数位数
     */
    private static final int SCALE_VALUE = 3;
    public static final int DEFAULT_MONERY_SCALE_VALUE = 2;

    /**
     * 四舍五入保留两位小数
     * 
     * @param amount
     * @return amount四舍五入结果
     */
    public static double formatAmount(double amount) {
        BigDecimal b = new BigDecimal(amount);
        return b.setScale(SCALE_VALUE, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    /**
     * 验证输入的字符串是否是金额格式
     * 
     * @param amount
     * @return
     */
    public static boolean checkAmount(String amountString) {
        if (null == amountString || amountString.trim().length() == 0) {
            return false;
        }
        amountString = amountString.trim();
        String str = "^(0(\\.\\d{0,2})?|([1-9]+[0]*)+(\\.\\d{0,2})?)$";
        Pattern p = Pattern.compile(str);
        Matcher m = p.matcher(amountString);
        return m.find();
    }

    /**
     * 格式化
     * @param amount
     * @return
     */
    public static String formatAmountStr(String amountString) {
        int pos = amountString.indexOf(".");
        if (pos != -1) {
            int tempInt = amountString.substring(pos + 1, amountString.length()).length();
            if (tempInt == 1) {
                amountString += "0";
            }
            if (tempInt > 2) {
                amountString = amountString.substring(0, pos + 3);
            }
        } else {
            amountString += ".00";
        }
        return amountString;
    }

    /**
     * 除1000得到真实钱值
     * @param money
     * @return
     */
    public static BigDecimal divide1000(Long money) {
        if (money == null) {
            return null;
        }
        BigDecimal result = BigDecimal.valueOf(money);
        return result.divide(MAG).setScale(DEFAULT_MONERY_SCALE_VALUE, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 除1000得到真实钱值(保留3位小数)
     * @param money
     * @return
     */
    public static BigDecimal divide1000Scale3(Long money) {
        if (money == null) {
            return null;
        }
        BigDecimal result = BigDecimal.valueOf(money);
        return result.divide(MAG).setScale(3, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 除1000得到真实钱值
     * @param money
     * @return
     */
    public static BigDecimal divide1000(BigDecimal money) {
        if (money == null) {
            return null;
        }
        return money.divide(MAG).setScale(2, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 除10000得到真实钱值
     * @param money
     * @return
     */
    public static BigDecimal divide10000(Long money) {
        if (money == null) {
            return null;
        }
        BigDecimal result = BigDecimal.valueOf(money);
        return result.divide(MAG4).setScale(DEFAULT_MONERY_SCALE_VALUE, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 除10000得到真实钱值,保留4为小数
     * @param money
     * @return
     */
    public static BigDecimal divide10000For4Scale(Long money) {
        if (money == null) {
            return null;
        }
        BigDecimal result = BigDecimal.valueOf(money);
        return result.divide(MAG4).setScale(4, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 除10000得到真实钱值
     * @param money
     * @return
     */
    public static BigDecimal divide10000(BigDecimal money) {
        if (money == null) {
            return null;
        }
        return money.divide(MAG4).setScale(2, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 乘以1000得到计算用钱值
     * @param money
     * @return
     */
    public static Long multiply1000(BigDecimal money) {
        if (money == null) {
            return null;
        }
        return money.multiply(MAG).setScale(2, BigDecimal.ROUND_HALF_UP).longValue();
    }

    /**
     * 乘以10000得到计算用钱值
     * @param money
     * @return
     */
    public static Long multiply10000(BigDecimal money) {
        if (money == null) {
            return null;
        }
        return money.multiply(MAG4).setScale(2, BigDecimal.ROUND_HALF_UP).longValue();
    }

    /**
     * 乘以1000得到计算用钱值
     * @param money
     * @return
     */
    public static Long multiply1000(Double money) {
        if (money == null) {
            return null;
        }
        BigDecimal result = BigDecimal.valueOf(money);
        return result.multiply(MAG).setScale(2, BigDecimal.ROUND_HALF_UP).longValue();
    }

    /**
     * 乘以1000得到计算用钱值
     * @param money
     * @return
     */
    public static Long multiply1000(Long money) {
        if (money == null) {
            return null;
        }
        BigDecimal result = BigDecimal.valueOf(money);
        return result.multiply(MAG).setScale(2, BigDecimal.ROUND_HALF_UP).longValue();
    }

//    public static void main(String[] args) {
//        long id = 1234567890L;
//        BigDecimal bigDecimal = AmountUtil.divide1000Scale3(id);
//        System.out.println(bigDecimal);
//    }
}

 

 

 

 

 

分享到:
评论

相关推荐

    通用数据库格式转换工具

    支持Oracle,SQL Sever,Access,Excel等数据库之间数据格式批量转换:即Oracle转SQL Server;SQL Server转Oracle;Oracle转Access;Access转Oracle;SQL Server转Access, Access转SQL Server等,支持Oracle,SQL Sever,...

    VC开发的金额大小写转换

    总的来说,"VC开发的金额大小写转换"是一个实用的工具,能够帮助开发者快速地在C++环境下处理银行系统中的金额格式转换需求。通过理解和运用该项目中的代码,可以提升开发效率,确保金融系统的数据准确性。对于学习...

    基于vueelement的金额格式化组件

    在实际项目中,我们经常需要处理与金钱相关的数据,这时就需要用到金额格式化组件。"基于vue-element的金额格式化组件"是针对这一需求而设计的,它将帮助我们在Vue.js应用中方便地展示和输入货币值。 Vue Element是...

    VB编写的金额转换例子

    这个例子展示了如何将数字格式的金额转换为汉字大写,以便于财务报表和支票等正式文档的清晰表述。汉字大写金额转换是避免混淆和错误的重要步骤,因为汉字字符在财务领域具有明确的含义,例如“壹”代表1,“贰”...

    Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)

    通过上述两种方法,我们可以将普通的数字字符串转换为更加易于阅读的金额格式。使用循环的方法比较直观,适合理解基础的字符串操作逻辑。而使用正则表达式则更为简洁,代码量较少,但在处理小数点后的位数时需要额外...

    BAT批处理脚本-格式转换-人民币金额小写转大写.cmd.zip

    本文将详细介绍"BAT批处理脚本-格式转换-人民币金额小写转大写.cmd.zip"这个压缩包中的知识点,以及如何利用批处理脚本来实现人民币金额的小写到大写的转换。 首先,我们要理解批处理脚本的基本概念。批处理脚本是...

    VB 将小写数字金额格式化为大写金额.rar

    VB 将小写数字金额格式化为大写金额,这一个相比其它的金额数字转换,是自动转换,用户输入完小写数字金额后,程序将自动把小写数字变为大写,不过奇怪的是,在代码中并没有发现转换功能写在哪里,看到有数据库,...

    java 类 金额转换成大写

    Java 类金额转换成大写 在 Java 编程语言中,金额转换成大写是非常有用的功能,特别是在财务、银行、电子商务等领域中。下面我们来详细介绍如何使用 Java 实现金额转换成大写的功能。 实例代码分析 首先,我们来...

    C# - 阿拉伯数字金额转换为繁体数字金额

    这个特定的项目“C# - 阿拉伯数字金额转换为繁体数字金额”专注于一个常见的财务处理任务,即把通常用阿拉伯数字表示的货币金额转化为繁体中文的表示方式。这在中文环境中特别有用,因为繁体数字在正式的商业文档和...

    Asp.net C# 数字货币金额转换为中英文金额写法

    总的来说,这个资源提供了一个实用的工具,帮助开发者快速将数字金额转换为符合规范的中英文格式,这对于处理金融数据、制作财务报表等场景非常有价值。通过学习和理解这些方法,开发者可以更好地应对实际工作中遇到...

    小写金额转换为大写金额

    在编程中,我们需要编写函数或程序来实现小写金额到大写金额的转换。这个过程涉及到数字与中文字符的对应关系,以及特定规则的应用。 转换规则如下: 1. **个位到十位**:0对应“零”,1对应“壹”,2对应“贰”,...

    电子表格财务金额转换大写解决办法

    在电子表格软件中,如Microsoft Excel或Google Sheets等,经常需要处理财务数据,尤其是在制作发票、账单或财务报告时,将金额从小写转换为大写是一项常见的需求。这种转换通常是为了符合会计准则或者便于阅读,特别...

    大小写金额转换

    此函数使用了Delphi语言的标准库函数,如`floattostr`、`strtofloat`和`stringutils.copy`,这些函数分别用于格式化浮点数、转换字符串到浮点数以及从字符串中复制子串。 #### 3. **函数逻辑解析** - **初始化变量...

    报账金额转换器

    在财务工作中,尤其是报销操作时,经常需要在不同格式或单位之间转换金额,例如从元到角分,或者从人民币到美元等。传统的转换方式可能依赖于Excel表格计算或是手动输入,这两种方法都需要花费较多的时间和精力。 ...

    Excel大写金额转换公式

    Excel的大写金额转换公式可以帮助我们快速、准确地将阿拉伯数字格式的金额转换为汉字大写的表示形式。以下是一些关键的知识点,涵盖了如何实现这一功能。 1. **基数转换**:首先,我们要理解的是,大写金额转换涉及...

    把大写金额转换成小写的

    同时,需要对常见的大写金额格式进行处理,如处理“整”和“零”的特殊情况。 在实际应用中,这样的转换功能可能被集成到财务软件或在线工具中,方便用户快速处理财务数据。同时,考虑到输入错误的可能性,验证和...

    银行金额转换

    在Java中实现银行金额转换主要涉及到字符串操作、数字格式化以及对特定字符(如小数点、负号)的处理。给定的代码示例展示了如何将一个数字字符串转换成具有中文读法的货币金额表述。 #### 重要数据结构与变量定义 ...

    winform C#人民币大小写金额转换程序

    本项目"winform C#人民币大小写金额转换程序"是一个实用工具,旨在帮助用户将输入的数字金额自动转换为规范的中文大写,这在财务报表、发票和合同中非常常见,因为中文大写可以避免因数字篡改而引发的争议。...

    大小写金额转换器

    "大小写金额转换器"是一个利用Delphi编写的实用小程序,主要功能是将阿拉伯数字格式的金额转换为汉字大写,这在财务、会计等领域中非常常见,因为汉字大写金额可以有效防止篡改,确保财务数据的准确性。 首先,我们...

    java 正则数字金额转换为大写

    输入字符,通过正则验证是否为金额不超过万亿精确到小数点后两位,然后将数字转换为大写 包括后台java正则验证及前台js验证 请输入一个数字(精确到小数点后两位): fdsa54325.54 fdsa54325.54 false 请输入一个...

Global site tag (gtag.js) - Google Analytics