2017-07-07 134 views
0

我需要做一些计算,但我得到的值很低,例如,我需要得到0.005的2.7%,最终得到1.3500000000000003e-4我不是在寻找什么,我只需要知道如何获得这些值的准确的百分比,我现在正在做的是<value> * 2.7/100,这对于整数或大于0.05的浮点数很有效。摆脱科学记数法

例如,我需要的是0.005的2.7%需要显示为0.000135。

回答

4

首先,明白语言没有坏,只是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模块的包装


注意结果是一个字符串,而不是浮在上面的例子 - 因为你只是格式化/打印它十进制。

+0

好,我必须提到,但我将这些值存储在数据库中,我是否应该使用':string'而不是':float'? : -/ – Aguxez

+0

不,将它们按原样存储。这些值是准确的,这正是Elixir代表他们的方式。 – Sheharyar

+0

噢好吧,我现在明白并修复了它,这有点让我发疯,数据库中的值浮动,但我只是将它们格式化为Phoenix模板和其他所有内容,谢谢! – Aguxez