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