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