Rob*_*ion 12 math floating-point elixir elixir-iex
我正在尝试将 e 中的 a 舍Float入到小数点后两位。
如果我有数字12.555,我希望我的舍入函数返回12.56
我最初认为这Float.round是我想要的,但这个函数并不总是返回我想要的答案。
例如...
iex()> Float.round(12.555, 2)
12.55
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过临时功能完成这项工作,但我认为必须有更好的解决方案。
我目前的解决方案是...
iex()> round(12.555 * 100) / 100
12.56
Run Code Online (Sandbox Code Playgroud)
这可以完成工作,但就像我说的那样,我只是想知道是否有更好的解决方案。
提前致谢
Ada*_*hip 12
由于浮点数的工作方式,如果您想要精度,包括控制舍入算法,则需要使用诸如Decimal 之类的库:
12.555
|> Decimal.from_float()
|> Decimal.round(2)
Run Code Online (Sandbox Code Playgroud)
输出:
#Decimal<12.56>
Run Code Online (Sandbox Code Playgroud)
然后您可以使用诸如Decimal.to_string/2打印或 之类的功能Decimal.to_float/1,但要注意这to_float/1也是一个不精确的操作并且可能会失败。