首页 > 解决方案 > Java设置所有小数点的双精度值并且只得到小数点后2位

问题描述

在 java 中,我对 store 和 get double value 感到困惑。目前我正在创建包含一些会计部分的软件,我想存储与计算值相同的计算值,如 202.234234234212312 并且在显示时我想将其显示为小数点后 2 位的 202.23。在计算中我想用 2,4 或 6 位进行计算。

为此,我有 2 个选项

  1. 在计算值时存储值,并在金额字段的 getter 方法中,我可以对其进行格式化。

    private Double amount;
    public Double getAmount() {
        DecimalFormat df2 = new DecimalFormat(".##");
        return Double.valueOf(df2.format(amount));
    }
    

但这种方法的问题是,它会在我得到数量的任何时候得到格式化的数字。我无法获得实际的存储量。

  1. 我可以使用 2 个单独的字段来获取和设置。

    private Double amount;
    private Double amountFormatted;
    
    public Double getAmount() {
        return amount;
    }
    
    public Double getAmountFormatted() {
        DecimalFormat df2 = new DecimalFormat(".##");
        return Double.valueOf(df2.format(amountFormatted));
    }
    

所以请提供更好的方法来存储和获取十进制值,谢谢。

标签: javahibernatedecimal

解决方案


首先,所有涉及金钱的计算都应该在 BigDecimal 中完成,而不是 double。双精度数不能准确地表示像 0.1 这样的数量。

其次,getAmountFormatted如果它仅用于输出目的,则不应返回 Double 而应返回 String。

对这两种方法使用相同的数量变量。


推荐阅读