2017-07-07 140 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