Elixir 摆脱科学记数法
我需要做一些计算,但是我遇到了一个非常低的值的问题,例如,我需要得到0.005的2.7%,最终得到1.350000000000003e-4,这不是我想要的,我只需要知道如何才能得到这些值的准确百分比,我现在正在做的是Elixir 摆脱科学记数法,elixir,Elixir,我需要做一些计算,但是我遇到了一个非常低的值的问题,例如,我需要得到0.005的2.7%,最终得到1.350000000000003e-4,这不是我想要的,我只需要知道如何才能得到这些值的准确百分比,我现在正在做的是*2.7/100,它对整数或大于0.05的浮点值非常有效 例如,我需要的是0.005的2.7%,需要显示为0.000135。首先,要理解语言并没有被破坏,只是被破坏了 因此,从某种意义上说,1.350000000000003e-4是准确的,但您这里的问题是Elixir以指数表示法打印
*2.7/100
,它对整数或大于0.05的浮点值非常有效
例如,我需要的是0.005的2.7%,需要显示为0.000135。首先,要理解语言并没有被破坏,只是被破坏了 因此,从某种意义上说,
1.350000000000003e-4
是准确的,但您这里的问题是Elixir以指数表示法打印(非常小和非常大)浮点数。有几种方法可以将其打印为0.000135
:
- 使用Erlang的
:float\u to\u binary
:erlang.float_to_binary(0.005 * 2.7 / 100, [:compact, {:decimals, 10}]) #=> "0.000135"
- 使用
::io.format
:io.format("~f~n",[0.005 * 2.7 / 100]) #=> "0.000135"
- 或者在Erlang的
模块周围使用一种很好的长生不老药包装器:io
注意,在上面的示例中,结果是一个字符串而不是一个数字-因为您只是在格式化/打印十进制数。很好,我一定提到了,但我正在将这些值存储在数据库中,我是否应该使用
:string
而不是:float
?:-/不,按原样储存。值是准确的,这就是Elixir表示它们的方式。哦,好吧,我现在理解并修复了它,这有点让我发疯,值在数据库中是浮动的,但我只是在Phoenix模板和其他所有东西上格式化它们,谢谢!以前应该提到过这一点:如果数据库中存储的数字是敏感的或需要非常高的精度(例如货币),请使用notFloat
。