2016-05-05 8 views
0

すべてを探して、は、.NET小数変換ジレンマに倍増 - 提案

をマイセットアップ:

  • 我々はデータベースに(小数点以下6桁まで)小数点値として緯度/経度を格納しているされています

  • ドメインモデル(ロードされたエンティティ)にマッピングされます。アプリケーションでは、lat型/ lng型の操作を実行するクラス "Location"を使用しています。純粋な数学のAPIはダブルで働く)

したがって、データベースからlat/lngを10進数で読み込むと、アプリケーションによってdoubleとして終了します。それが問題です! double→dec(四捨五入)の変換で、なぜそれが起こるのか知っていますので、これを回避するにはどうすればよいでしょうか?問題の

例:

丸めは、ユーザが別の値が保存されるデータベースにLATをコンポーネント形式(DMS)で、変換後のLATを入力し、保存の場合には問題があります。コンポーネントフォームでユーザーが読み込んで見たとき、最初に入力したものではありません。

例:

ユーザーが入力:バックロードN10-01-03.5

:N10-01-03.468(DBLによって引き起こされる - > 12月換算)

考えられる解決策:

1)私の "Location"クラスで小数点を使う(lat/lng用)。計算をするたびにlat/lngをdec - > dblからdecに戻します。

2)緯度/経度をデータベースに倍精度で格納します(これが将来問題になるかどうかはわかりません)。精度は小数点以下第6桁にします。

3)ご提案.....

+2

倍精度の数値には、小数点以下6桁のみの丸め誤差がありません。小数点の左側の数値はどれくらいですか? –

+0

まず、JohnCarpenterに同意します。その矛盾は、小数点と二重の間の単なる丸め誤差から予想されるものよりもはるかに大きく見える –

+0

2番目に、正確に値を正確にする必要がある場合は、おそらくどこでも10進数を使用したいと思うでしょう。 –

答えて

0

すべて、私は問題を発見しました。しかし、dbl - > decの間には3.5秒が3.468になった理由が丸められていますが、ハイバーネーションマッピングでは精度/位取りの値を設定しないため、休止状態ではデフォルトが使用され、小数点第5位まで切り捨てられますデータベースに設定されている私のprec/scaleの値。

したがって、値'10 .0176388888889 'は'10 .0176300000000000'として保存されました。

関連する問題