- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作这个程序,让您可以购买一些不同的元素。
我将我的价格存储在一个 sqlite 数据库中(除了它是字符串或整数之外,还没有决定数据类型)。
我已经阅读了 2 个小时,试图掌握这一点,我理解为什么我不能使用 double 值或浮点值。
但我无法决定:我应该将价格存储为整数吗?或字符串。
我在这里看到的问题是,我总是被告知不要将整数存储为字符串.. 现在人们告诉我这很聪明,因为这是我保持价格准确性的唯一方法?
如果我将它们存储为整数,我将遇到以下问题:
int 5 / 100 //i want that to be 0.05
int 50 / 100 //i want that to be 0.50
int 500 / 100 //i want that to be 5.00
我如何在不使用 double 的情况下做到这一点??
或者也许有一种方法可以用 BigDecimals 做到这一点?
BigDecimal bddd1 = bdd1.setScale(2,RoundingMode.HALF_EVEN); // gives me 5.00 instead of 0.05
那么我将如何正确地做到这一点,总是得到 2 位小数。
最佳答案
正如其他人所建议的那样,您可以使用整数来存储美分的数量,但是如果您必须计算百分比或将(美分)金额除以 12 个月,那么您可能会遇到问题。那么您可能需要一个更准确的中间体。
BigDecimals 提供了这一切。在内部,它们是按比例缩放的整数,因此它们提供您需要的一切。
存储 5 美分非常简单,用一个字符串初始化:
BigDecimal fiveCents = new BigDecimal("0.05");
或者,计算:
BigDecimal oneCent = new BigDecimal("0.01");
BigDecimal fiveCents = BigDecimal.valueOf(5).multiply(oneCent);
或
BigDecimal fiveCents = BigDecimal.valueOf(5).movePointLeft(2);
或者任何你喜欢的,只要发挥你的想象力。但是不要使用 double 或 float 来初始化 BigDecimals,因为当它们有小数部分时它们可能不准确。使用字符串或使用整数除以100,或乘以百分之一或将小数点左移2。
我看到有人认为使用 BigDecimals 表示货币值是错误的,并且您宁愿使用(缩放的)整数,但 BigDecimals 正是:缩放的整数。对于“小”数字(低于最大 long 值),BigDecimals 甚至使用 long 而不是 BigInteger 来表示未缩放的值。
不要过早四舍五入,除非某些计算规则要求这样做。否则,只在最后舍入 (setScale()
)。
关于android - 如何在不使用 double 的情况下使用 BigDecimals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35991820/
我是一名优秀的程序员,十分优秀!