摆脱科学记数法

时间:2017-07-07 00:35:03

标签: elixir

我需要进行一些计算,但是我遇到的问题是非常低的值,例如,我需要得到0.005的2.7%而我最终得到1.3500000000000003e-4这不是我的意思我正在寻找,我只需要知道如何获得这些值的准确感知,我现在正在做的是<value> * 2.7 / 100,它对于大于0.05的整数或浮点数非常有用。

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

1 个答案:

答案 0 :(得分:7)

首先,要明白语言是否被打破,只是computers are just really bad at doing floating point math

所以,在某种意义上,1.3500000000000003e-4是准确的,但你的问题是Elixir以指数表示法打印(非常小和非常大)的浮点数。您可以通过以下几种方式将其打印为0.000135

  • 使用Erlang&#39; float_to_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"
    
  • 或者使用exprintf这是一个很好的Elixir包装器,围绕Erlang&#39; :io模块

请注意,结果是一个字符串,而不是上面示例中的数字 - 因为您只是以十进制格式化/打印它。