乘以十进制和整数会引发“算术表达式中的错误参数”

时间:2017-01-25 08:56:07

标签: elixir ecto

在我的项目中,我必须通过将Decimal中的价格乘以Integer中的数量来计算产品的总价。当我这样做时,我得到一个异常“算术表达式中的错误参数”。怎么解决这个?如果我必须round结果,我不想丢失数据。

1 个答案:

答案 0 :(得分:4)

Elixir不允许运算符重载,因此decimal包无法使*运算符在Decimal上运行。该软件包确实提供了一个函数Decimal.mult/2来乘以Decimal个值,它接受2个Decimal值,您可以使用它们。您需要先使用Decimal将整数转换为Decimal.new/1,然后使用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