java - Java设置所有小数点的双精度值并且只得到小数点后2位
问题描述
在 java 中,我对 store 和 get double value 感到困惑。目前我正在创建包含一些会计部分的软件,我想存储与计算值相同的计算值,如 202.234234234212312 并且在显示时我想将其显示为小数点后 2 位的 202.23。在计算中我想用 2,4 或 6 位进行计算。
为此,我有 2 个选项
在计算值时存储值,并在金额字段的 getter 方法中,我可以对其进行格式化。
private Double amount; public Double getAmount() { DecimalFormat df2 = new DecimalFormat(".##"); return Double.valueOf(df2.format(amount)); }
但这种方法的问题是,它会在我得到数量的任何时候得到格式化的数字。我无法获得实际的存储量。
我可以使用 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)); }
所以请提供更好的方法来存储和获取十进制值,谢谢。
解决方案
首先,所有涉及金钱的计算都应该在 BigDecimal 中完成,而不是 double。双精度数不能准确地表示像 0.1 这样的数量。
其次,getAmountFormatted
如果它仅用于输出目的,则不应返回 Double 而应返回 String。
对这两种方法使用相同的数量变量。
推荐阅读
- angular - 用 Hammerjs 从每个点捏
- python - Python忽略缺失值
- javascript - 将基本轮询变成长轮询
- mysql - 如何使用 sql group by 选择前 2 项并对一个字段求和?
- python - 无法使用 python pyodbc 查询批量插入数据
- vba - 条件失败时 VBA 使用渐变色
- spring-boot - Spring Cloud Gateway - 重写长 URL 时出现 413 错误
- excel - 是否有“LENIF”等价物?
- ios - SwiftUI:使用变量从右到左滚动 Imageview 的动画
- reactjs - 如何在reactjs中访问路由器链接?