2012-02-04 25 views
2
の後に数字を切り捨てます

私はmysqlデータベースに小数点以下を格納するRailsアプリケーションに問題があります。私は2つのフィールド: "金額"と "通貨"を持つフォームを持っています。 「amount」フィールドに10進数値を入力すると(例えば1,22)、Railsはデータベースに1を格納します。Ruby on Railsはmysqlデータベースに小数点以下を格納しません:

私のログファイルは次のようになります。

Started POST "/cashamounts" for 127.0.0.1 at 2012-02-04 13:23:54 +0100 
    Processing by CashamountsController#create as HTML 
    Parameters: {"utf8"=>"✓","authenticity_token"=>"QpWGfEtDR1tc7wTFmZZst9gYjKAyXtRypilsxDE9Tzs=", "cashamount"=>{"currency_id"=>"eur", "amount"=>"1,22"}, "commit"=>"Create Cashamount"} 
    [1m[36mCurrency Load (2.8ms)[0m [1mSELECT `currencies`.* FROM `currencies` ORDER BY name[0m 
    [1m[35m (0.2ms)[0m BEGIN 
    [1m[36mSQL (0.3ms)[0m [1mINSERT INTO `cashamounts` (`amount`, `created_at`, `currency_id`, `updated_at`) VALUES (1, '2012-02-04 12:23:54', 'eur', '2012-02-04 12:23:54')[0m 
    [1m[35m (0.6ms)[0m COMMIT 
Redirected to http://localhost:3000/cashamounts/8 
Completed 302 Found in 94ms 

だから量が正しくのparamsに格納されますが、データベースに正しく挿入されていません。私はdb/schema.rbファイルをチェックしました。列「金額」の行は次のとおりです。

t.decimal "amount",    :precision => 10, :scale => 2 

他にはどこに問題を見つけることができますか?

PS。私はお金の宝石を使って始めましたが、それは同じ問題を示しました。「、」の後の数字はすべて保存されません。

+0

'1.22'のように小数点を入力するとどうなりますか? –

+0

また、1.22の表記法では動作しません: パラメータ:{"utf8" => "✓"、 "authenticity_token" => "QpWGfEtDR1tc7wTFmZZst9gYjKAyXtRypilsxDE9Tzs ="、 "cashamount" => {"currency_id" => ""、 "amount2 "=>" 1.22 "}、"コミット "=>"カashamountを作成 "} [1m [35mCurrency Load(3.3ms)[0m SELECT'通貨] * [通貨] ORDER BY名 [1m [36m(0.2 (amount、created_at'、 'currency_id'、' updated_at')VALUES(1、 '2012-02-30)[0m [1mBEGIN [0m [1m [35mSQL(0.5ms) 04 13:05:27 '、' '、' 2012-02-04 13:05:27 ') – gerwin

+0

マイグレーションなどを実行したことを忘れましたか?実際のDBスキーマを確認し(MySQL自体を介して)、それがINTフィールドでないことを確認してください。 – d11wtq

答えて

2

1,22は英小文字のヨーロッパ表記で、1.22は英国、アメリカ、オーストラリアの表記です。ロケールを設定する必要があるかもしれません。イニシャライザで

http://guides.rubyonrails.org/i18n.html#optional-custom-i18n-configuration-setup

I18n.default_locale = :fr 

またはCONFIG/application.rb

​​
+0

残念ながら、これは問題を解決しませんでした。挿入するための私のログは、私が上に投稿したものと同じように見えます。 – gerwin

0

の終わりに問題がレールは小数点ではなくカンマを期待することです。これがユーザ入力の場合は、.,を代入してからデータベースに保存してください。

+0

カンマは、ヨーロッパの大部分とアジアの一部では小数点です。 – d11wtq

5

この質問は少し古いですが、将来の訪問者のために、私は答えはの「ガッチャ」セクションで見つけることができると信じて:

http://torontoprogrammer.ca/2010/05/decimal-numbers-in-rails-and-mysql/

基本的に、小数点以下の桁数を指定するには、小数点フィールドを設定するときに、scale引数を指定する必要があります。それ以外の場合、mysqlはすべての桁を小数点の左に欲しいと仮定します。

この問題は私にもあてはまります。すべてが私の開発環境(sqliteを使用して)でうまくいきましたが、(mysqlを使用して)プロダクションでは、「10進数」の小数部分が切り捨てられていました。

+0

この応答に感謝します。レールがデフォルトの2のスケールになっているようです。 –

関連する問題