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

Tor*_*ito 1 elixir ecto

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

Dog*_*ert 5

Elixir 不允许运算符重载,因此该decimal包无法使*运算符在Decimal. 该包确实提供了一个Decimal.mult/2乘以Decimal值的函数,它接受 2 个Decimal值,您可以使用它。您需要先将整数转换为DecimalusingDecimal.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
Run Code Online (Sandbox Code Playgroud)