【发布时间】:2017-01-25 17:44:15
【问题描述】:
在我的项目中,我必须通过将十进制的价格乘以整数的数量来计算产品的总价格。当我这样做时,我得到一个异常“算术表达式中的错误参数”。怎么能解决呢?如果我必须round 结果,我不想丢失数据。
【问题讨论】:
-
请提供有趣的代码
在我的项目中,我必须通过将十进制的价格乘以整数的数量来计算产品的总价格。当我这样做时,我得到一个异常“算术表达式中的错误参数”。怎么能解决呢?如果我必须round 结果,我不想丢失数据。
【问题讨论】:
Elixir 不允许运算符重载,因此 decimal 包无法使 * 运算符在 Decimal 上工作。该包确实提供了一个函数Decimal.mult/2 来乘以Decimal 值,它接受2 个Decimal 值,您可以使用它们。您需要先使用Decimal.new/1 将整数转换为Decimal,然后再使用Decimal.mult/2:
iex(1)> d = Decimal.new("0.11111111111111111111")
#Decimal<0.11111111111111111111>
iex(2)> Decimal.mult(d, Decimal.new(3))
#Decimal<0.33333333333333333333>
iex(3)> 0.11111111111111111111 * 3 # This loses precision because Elixir's native floats are 64 bit IEEE floats
0.3333333333333333
【讨论】:
decimal 包,所以完全相同的东西应该可以工作。