2016-11-04 17 views
1

整数型でcentsとしてデータベースに保存されています。表示する場合:金額で金額を表示したいので、私はそれを浮動小数点数に変換します。私は常に2桁で番号を表示したい:小数点以下2桁をfloatで表示します。

例:

5000 => 50.00 
500 => 5.00 
50 => 0.50 
5 => 0.05 
0 => 0.00 

最もタフな1が0.50に変換し50を取得しているので、それはそれは0.5に変換したいフロートからです。動作しません

現在の方法は:

def cents_to_currency_string 
    return if cents.nil? 
    (cents.to_f/100) 
end 
+0

ドン '通貨を浮動小数点として格納する。決して良い考えではありません。 [this](http://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency)および/または[this](https://spin.atomicobject。 com/2014/08/14/currency-rounding-errors /)を使用します。 –

+0

@EliSadoffフロートとして保存されません。これは整数として格納されます。私は単にそれをフロートとして表示しています。わかりやすく質問を更新しました。 – Neil

+0

質問が間違っています。 –

答えて

4

取る利点のようにそれを表示することができます。

def cents_to_currency_string(cents) 
    return if cents.nil? 
    dollars = cents.to_f/100 
    '%.2f' % dollars 
end 
+0

'cents_to_currency_string 50 => 50.00' OPがそういうことを望まないものではない –

+0

@muistooshortはOPの期待される出力を見ます。 –

+2

' cents'の 'to_f'呼び出しを忘れないでください。 'String#%' OTOHはこの問題に近づくための唯一の方法です。 –

0

あなたはこのいくつかの異なる方法行うことができます。最も簡単な方法は、この

def display(n) 
    if n % 100 < 10 
    "$#{n/100}.0#{n%100}" 
    else 
    "$#{n/100}.#{n%100}" 
    end 
end 

ような何かを行うことです。そして、あなたは独自の実装のこの

puts centize(n) 
+0

'centize 50 =>" 50 "' OPがこのように間違って望んでいるものではない:) –

+0

私が書いた実装を読んだ? 'centize'はセントの整数値をとります。 –

+0

OPの期待出力を読む:) –

1

することはできほんの少しあなたの方法を編集するビット:

def cents_to_currency_string(cents)  
    return if cents.nil? 
    (cents.to_f/100).to_s.ljust(4,'0') 
end 
+0

実際に彼のアテンプトでOPを手助けする良い点は、 –

+0

@AndreyDeineko thanks :) –

関連する問題