【发布时间】:2020-08-13 17:24:39
【问题描述】:
我有代表钱的字符串。例如 29.00 或 29.10 或 29.13,货币可以更改,但不一定会导致默认情况下具有两位小数的值(例如日元根本没有小数位)
现在,我使用 Decimal.js 使用这些值执行计算
例如我乘以百分比
let d = new decimal("29.00")
let e = d.mul(0.133333333333).toDP(d.decimalPlaces())
然而,这个结果被舍入到小数点后 0 位,因为构造函数去掉了尾随的零并将 decimalPlaces 设置为 0。
我怎样才能得到一个十进制值,它总是需要输入字符串提供的小数位数?在此示例中,d.decimalPlaces 应返回 2(因为 29.00 必须保留小数位)。
替代解决方案:如何从字符串中提取小数位数?
【问题讨论】:
-
将其作为字符串传递是否可以解决问题?
29.00是一个 JavaScript 数字,没有“尾随零”,它只是29,因为这就是您所要求的。 -
@tadman:这几乎肯定是解决方案;从定义上讲,您无法使用二进制浮点数准确地初始化十进制。我知道的每个十进制包都建议在所有情况下都使用字符串,但简单的小整数初始化除外。
-
我不会说“二进制”,我会说JavaScript Number,默认情况下它是一个浮点值,并且它们的表示中没有“尾随零”。
29、29.0和29.00000000000000000都是相同的值。 -
对不起,我写了我有字符串但没有将它们放入示例中。我更新了问题。我正在用“数字字符串”初始化小数
-
如前所述。我有来自分贝的钱串。 “29.00”甚至只是“29”现在我乘以 0.13333333 或任何奇数。我需要结果与以前一样具有精确的小数位数。因此,如果它之前是“29.00”,那么它必须是 29*0.1333333= 3.07 之后(“29.00”的 2 个小数位)。但如果数据库只存储“29”,我需要结果是 3 直 ;)
标签: javascript decimal