Rails 3.2 アプリで経度と緯度を保存すると、保存時に値が切り捨てられます。
コンソールで試してみましたが、完全な値が保存されています:
item.update_attributes(:latitude => '51.07763839854951')
item.latitude:
=> 51.07763839854951
同じ値をブラウザに保存すると、次の出力が得られます。
51.0865174
これを防ぐにはどうすればよいですか?
Rails 3.2 アプリで経度と緯度を保存すると、保存時に値が切り捨てられます。
コンソールで試してみましたが、完全な値が保存されています:
item.update_attributes(:latitude => '51.07763839854951')
item.latitude:
=> 51.07763839854951
同じ値をブラウザに保存すると、次の出力が得られます。
51.0865174
これを防ぐにはどうすればよいですか?
値が DB に格納されるときに切り捨てられている可能性があります。正確な原因に関係なく、この値が正確であり、ロスレスで保存および取得する必要がある場合、浮動小数点数はおそらく使用するデータ型として不適切です。浮動小数点数は、特定の算術演算を実行すると精度が失われる可能性があるため、正確でなければならない値には適していません。
Rails マイグレーションを使用して DB スキーマを定義する場合、:decimal
正確に格納する必要がある 10 進数値の型を使用できます。(ActiveRecord がこれらの値を DB から引き出すと、それらはsBigDecimal
ではなくオブジェクトになります。精度を失うことなく s でFloat
演算を行うことができます。)BigDecimal