2017-07-07 17 views
0

私はいくつかの計算をする必要がありますが、非常に低い値の問題を抱えています。たとえば、0.005の2.7%を取得する必要があり、1.3500000000000003e-4で終わります私が探しているものではありません、私はちょうどそれらの値の正確なpercetageを得ることができます知っている必要があります、私は今何をしている<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は正確ですが、ここで問題となるのは、エリクサーが(非常に小さくて非常に大きい)浮動小数点数を指数表記で表示することです。

  • 利用アーランのfloat_to_binary:あなたは0.000135としてそれを印刷することができ、いくつかの方法があります

    :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のラッパー:ioモジュール


通知は、結果は文字列ではなく、上記の例ではフロートである - あなただけの小数でそれを印刷する/書式設定しているので。

+0

偉大な、私は言及する必要がありますが、私は ':float'の代わりに':string'を使わなければならないのですか? : -/ – Aguxez

+0

いいえ、そのまま保管してください。値は正確で、Elixirがそれらをどのように表しているかだけです。 – Sheharyar

+0

ああ、私は理解し、今それを固定しました、それはちょっと私を夢中にさせました、値はデータベースの浮動ですが、私はちょうどフェニックスのテンプレートと他のすべての、感謝のそれらをフォーマットしています! – Aguxez

関連する問題