`
xinklabi
  • 浏览: 1588175 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

金额操作使用BigDecimal

 
阅读更多

金额操作使用BigDecimal,使用double的话会有精度损失

 

MultiCurrencyMoney:

/**

     * 构造器。

     *

     * <p>

     * 创建一个具有金额<code>amount</code>元和指定币种<code>currency</code>的货币对象。

     *

     * @param amount 金额,以元为单位。

     * @param currency 币种。

     */

    public MultiCurrencyMoney(String amount, Currency currency) {

        this(new BigDecimal(amount), currency);

    }

 

 

/**

     * 构造器。

     *

     * <p>

     * 创建一个具有金额<code>amount</code>和指定币种的货币对象。

     * 如果金额不能转换为整数分,则使用四舍五入方式取整。

     *

     * <p>

     * 注意:由于double类型运算中存在误差,使用四舍五入方式取整的

     * 结果并不确定,因此,应尽量避免使用double类型创建货币类型。

     * 例:

     * <code>

     * assertEquals(999, Math.round(9.995 * 100));

     * assertEquals(1000, Math.round(999.5));

     * money = new Money((9.995));

     * assertEquals(999, money.getCent());

     * money = new Money(10.005);

     * assertEquals(1001, money.getCent());

     * </code>

     *

     * @param amount 金额,以元为单位。

     * @param currency 币种。

     */

    public MultiCurrencyMoney(double amount, Currency currency) {

        this.setCurrency(currency);

        //      this.cent = Math.round(amount * getCentFactor());        

        this.cent = Math.round(CheckOverflow.doubleCheckedMultiply(amount, getCentFactor()));

    }

分享到:
评论

相关推荐

    高精度JSBigDecimal运算

    例如,在电商网站进行价格计算时,可以确保小数部分的正确性,防止因精度问题导致的金额计算错误。在科学计算中,高精度的BigDecimal运算也能确保实验结果的准确性。 总的来说,高精度JSBigDecimal运算库通过提供高...

    java代码-BigDecimal 四舍五入保留2位小数. 金额从单位分转成单位元

    本示例代码主要关注如何使用BigDecimal进行四舍五入操作,以保留两位小数,并将金额从单位分转换为单位元。下面将详细解释相关知识点。 1. BigDecimal类: BigDecimal是Java提供的一个大数类,它提供了对任意精度...

    人民币小写转大写JAVA程序.doc

    该程序使用了BigDecimal类型来处理金额,并使用String数组来存储中文数字和单位。 知识点1:BigDecimal类型在JAVA中的应用 在JAVA中,BigDecimal类型主要用于精度计算,特别是在金融领域中,BigDecimal类型可以...

    java金额、java生成pdf、java编译资源文件

    通常,我们会使用`BigDecimal`类来处理金额,它提供了精确的十进制运算。例如: ```java BigDecimal amount = new BigDecimal("123.45"); BigDecimal otherAmount = new BigDecimal("67.89"); BigDecimal sum = ...

    Joda-Money-用于表示货币金额的Java库

    在这个库中,货币金额被表示为`Money`对象,它包含了丰富的API来执行各种货币相关的操作。 ### 1. 类型与对象 Joda-Money的核心类是`Money`,它代表了一个具体的货币金额。`Money`类支持精确的数值运算,避免了...

    金额的大小转换及小数的四舍五入处理

    在Java中,我们可以使用`DecimalFormat`类进行类似的操作: ```java DecimalFormat df = new DecimalFormat("#,##0.00"); String formatted = df.format(1234567.89); System.out.println(formatted); // 输出:1,...

    BOS开发典型示例代码.pdf

    根据提供的文件信息,我们可以从...通过这些内容,可以了解到如何在BOS开发中使用`BigDecimal`类型来处理金额,以及如何进行单据的新增、修改和删除等操作。这些知识对于从事相关领域开发工作的人员来说是非常实用的。

    【项目实践】商业计算怎样才能保证精度不丢失(csdn)————程序.pdf

    对于除法操作,由于可能存在除不尽的情况,可以使用`divide(BigDecimal divisor, int scale, RoundingMode roundingMode)`方法,其中`scale`指定结果的小数位数,`roundingMode`指定了舍入策略,以避免无限循环的...

    java贷款计算器

    在处理金钱和贷款计算时,由于浮点数运算可能存在精度问题,使用`BigDecimal`可以避免因四舍五入导致的误差,确保计算结果的准确性。例如,在计算贷款利息和还款金额时,`BigDecimal`的`add`、`subtract`、`multiply...

    Java灵魂17问.pdf

    在Java编程中,正确使用数据类型和类库是至关重要的,尤其是在处理精度要求高的数值计算时,如金融领域的金额计算。`BigDecimal`类是Java `java.math`包中用于进行高精度浮点数运算的类,它能确保计算结果的精确性。...

    崔希凡JavaWeb笔记day25-day27

    - **`getSubtotal()`方法**:计算单个商品的总价(小计),使用`BigDecimal`来避免浮点数运算中的精度丢失问题。 **1.2 购物车的设计** 购物车被表示为`Cart`类,它包含了一系列的购物条目,并提供了一些基本的...

    JAVA解惑 大量java实例 Java程序员阅读

    在上述示例中,尝试计算找零金额时,使用了`System.out.println(2.00 - 1.10);`。尽管期望输出是0.90,但实际上输出的是0.***。这是因为1.10不能被精确表示为二进制浮点数,所以在计算机中存储的是最接近的值。 ...

    java解惑(中文)

    在性能敏感的场景下,可以使用位操作符`&`来替代取余操作符,提高效率: ```java public static boolean isOdd(int i){ return (i & 1) != 0; } ``` 现在,让我们转向第二个谜题,涉及浮点数的精度问题。在Java中...

    springm使用easypoi导入导出

    4. **Excel导出**:在`exportExcel`方法中,使用Easypoi的`Workbook`类创建一个新的Excel文件,然后使用`CellData`和`Sheet`等类设置单元格的数据和样式。最后,将生成的Excel文件写入到HTTP响应中,用户就可以下载...

    《Java解惑》

    解决方法一是使用整数表示货币,如以分表示金额,二是使用`BigDecimal`类进行高精度计算。创建`BigDecimal`对象时,应使用`BigDecimal(String)`构造器,避免`BigDecimal(double)`导致的精度损失。 3. **整数相乘...

    JAVA语言解惑文档

    在Java编程语言中,理解和掌握各种操作符的特性和行为至关重要。本文主要探讨了两个关于Java语言中的问题,这些...对于浮点数,尤其是在金融计算或精确度要求高的领域,应优先考虑使用`BigDecimal`来保证计算的准确性。

    java小项目-银行管理系统

    存款和取款功能涉及到金额的增减操作,需要精确的计算和事务管理。在Java中,可以使用BigDecimal类来处理浮点数,以确保精度。同时,这些操作应当在数据库事务中执行,确保数据的一致性。例如,当用户尝试取款时,...

    经典 java 解 惑

    此外,在性能敏感的应用场景中,可以使用位操作符`&`来替代取余操作: ```java public static boolean isOdd(int i) { return (i & 1) != 0; } ``` #### 二、货币计算中的二进制浮点数问题 **标题与描述中的知识...

    JAVA解惑.pdf

    **注意点**:使用取余操作符时需注意操作数的正负号,尤其是在涉及到负数的情况时。 #### 知识点三:浮点数运算与货币计算 **问题描述**:下面的程序尝试计算找零金额: ```java public class Change { public ...

Global site tag (gtag.js) - Google Analytics