0

Rails 3.2 アプリで経度と緯度を保存すると、保存時に値が切り捨てられます。

コンソールで試してみましたが、完全な値が保存されています:

 item.update_attributes(:latitude => '51.07763839854951')

 item.latitude:

 => 51.07763839854951

同じ値をブラウザに保存すると、次の出力が得られます。

 51.0865174

これを防ぐにはどうすればよいですか?

4

1 に答える 1

1

値が DB に格納されるときに切り捨てられている可能性があります。正確な原因に関係なく、この値が正確であり、ロスレスで保存および取得する必要がある場合、浮動小数点数はおそらく使用するデータ型として不適切です。浮動小数点数は、特定の算術演算を実行すると精度が失われる可能性があるため、正確でなければならない値には適していません。

Rails マイグレーションを使用して DB スキーマを定義する場合、:decimal正確に格納する必要がある 10 進数値の型を使用できます。(ActiveRecord がこれらの値を DB から引き出すと、それらはsBigDecimalではなくオブジェクトになります。精度を失うことなく s でFloat演算を行うことができます。)BigDecimal

于 2012-08-05T15:13:50.850 に答える