0
我需要做一些计算,但我得到的值很低,例如,我需要得到0.005的2.7%,最终得到1.3500000000000003e-4我不是在寻找什么,我只需要知道如何获得这些值的准确的百分比,我现在正在做的是<value> * 2.7/100
,这对于整数或大于0.05的浮点数很有效。摆脱科学记数法
例如,我需要的是0.005的2.7%需要显示为0.000135。
我需要做一些计算,但我得到的值很低,例如,我需要得到0.005的2.7%,最终得到1.3500000000000003e-4我不是在寻找什么,我只需要知道如何获得这些值的准确的百分比,我现在正在做的是<value> * 2.7/100
,这对于整数或大于0.05的浮点数很有效。摆脱科学记数法
例如,我需要的是0.005的2.7%需要显示为0.000135。
首先,明白语言没有坏,只是computers are just really bad at doing floating point math。
因此,在某种意义上1.3500000000000003e-4
是准确的,但您的问题在于,Elixir以指数符号打印(非常小和非常大)的浮点数。有几个方法,你可以打印为0.000135
:
使用Erlang的float_to_binary
:
:erlang.float_to_binary(0.005 * 2.7/100, [:compact, {:decimal, 10}])
#=> "0.000135"
使用:io.format
:
:io.format("~f~n",[0.005 * 2.7/100])
#=> "0.000135"
或者使用exprintf
这是一个很好药剂Erlang's :io
模块的包装
注意结果是一个字符串,而不是浮在上面的例子 - 因为你只是格式化/打印它十进制。
好,我必须提到,但我将这些值存储在数据库中,我是否应该使用':string'而不是':float'? : -/ – Aguxez
不,将它们按原样存储。这些值是准确的,这正是Elixir代表他们的方式。 – Sheharyar
噢好吧,我现在明白并修复了它,这有点让我发疯,数据库中的值浮动,但我只是将它们格式化为Phoenix模板和其他所有内容,谢谢! – Aguxez