「SQLServerの小数点第7位の切捨て問題」の詳細記事: Javaってまだいけますか
いっぱいいっぱいで無理なので学んだ事をいちいちメモっていくブログです。
[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Navigation
- 前の記事: VBAで基数変換(36進とか)
- 次の記事: DB2で制約/Identity有りのテーブルのエクスポート/インポート
SQLServerの小数点第7位の切捨て問題
SQLServer2005で、小数点第7位の切捨て問題回避策についてメモ。
以下のSQLを実行すると、3.666666という結果になります。
つまり、小数点第7位以下は切捨てになっています。
(四捨五入なら3.666667)
これが会計系のシステムで配賦計算などを行なう際に誤差を大きくする原因となったりしました。
その時とった回避策は以下の通り。
1.一旦計算対象の値を10倍します。⇒ 上の例だと、11×10=110
2.その値に対して計算処理を実施します。⇒ 110÷3=36.666666
3.計算結果を小数点題6位で四捨五入します。⇒ ROUND(36.666666, 5)=36.666670
4.それを最初にかけた値で割ります。⇒ 36.666670÷10=3.666667
これで小数点第7位を切り捨てではなくて四捨五入として扱えます。
上記の例だと10倍して最後に10で割りましたが、もっと小さな値を扱う場合は1000倍とかして計算するともっと精度が上がります。
以下のSQLを実行すると、3.666666という結果になります。
select 11 / 3.0
つまり、小数点第7位以下は切捨てになっています。
(四捨五入なら3.666667)
これが会計系のシステムで配賦計算などを行なう際に誤差を大きくする原因となったりしました。
その時とった回避策は以下の通り。
1.一旦計算対象の値を10倍します。⇒ 上の例だと、11×10=110
2.その値に対して計算処理を実施します。⇒ 110÷3=36.666666
3.計算結果を小数点題6位で四捨五入します。⇒ ROUND(36.666666, 5)=36.666670
4.それを最初にかけた値で割ります。⇒ 36.666670÷10=3.666667
これで小数点第7位を切り捨てではなくて四捨五入として扱えます。
上記の例だと10倍して最後に10で割りましたが、もっと小さな値を扱う場合は1000倍とかして計算するともっと精度が上がります。
PR
Navigation
- 前の記事: VBAで基数変換(36進とか)
- 次の記事: DB2で制約/Identity有りのテーブルのエクスポート/インポート
「SQLServerの小数点第7位の切捨て問題」にトラックバックする
「SQLServerの小数点第7位の切捨て問題」へのトラックバック
「SQLServerの小数点第7位の切捨て問題」へのコメント
「SQLServerの小数点第7位の切捨て問題」にコメントする
Navigation
menu
ブログ内検索
カテゴリー
カウンター
忍者アド
リンク
最新CM
[07/17 セバ]
[12/27 NONAME]
最新記事
(10/15)
(10/01)
(08/12)
(08/12)
(08/11)
プロフィール
HN:
takacy.k
年齢:
45
性別:
男性
誕生日:
1979/08/13
趣味:
酒
自己紹介:
個人的なメモですので、投稿内容について真偽を保証するものではありません。また、当ブログの内容をご利用になったことによる(以下略)