質問: 自動車の排気量ccをリットル(車検証記載の方式でccの1の位は切り捨てする条件)に変えるSQL文を作成していましたが、お客様からおかしいと指摘を受け、調べてみると不可解な現象に悩んでしまいました。おバカな質問かもしれませんが宜しくお願いします。 ### 前提・実現したいこと 自動車の排気量ccをリットル(車検証記載の方式でccの1の位は切り捨てする条件)に変えるSQL文を作成していましたが、お客様から間違ってると指摘を受け、調べてみると不可解な現象に悩んでしまいました。おバカな質問かもしれませんが宜しくお願いします。 求めている結果は以下の通りなのですが、 軽自動車 658cc → 0.65L 普通車A 2990cc → 2.99L 普通車B 3630cc → 3.63L 自分が作成したSQL文 SELECT round([排気量cc]/1000,2,1) from [車両データテーブル] を実行すると なぜだか普通車Bの結果が3.62となってしまいます。 SELECT round([排気量cc],-1,1)/1000とすると3.63となるのですが原因が分からなくてもやもやしています。 ちなみに[排気量cc]カラムはfloatです。 ### 発生している問題・エラーメッセージ SELECT round(3630/1000,2,1) の結果が3.62 ### 該当のソースコード ``` SELECT round([排気量cc]/1000,2,1) from [車両データテーブル] 以下だと計算結果が正しくなる SELECT round([排気量cc],-1,1)/1000 from [車両データテーブル] ``` ### 試したこと 問題を解決する為に以下のSQL文を実行 SELECT [排気量cc], round([排気量cc]/1000,2,1) , round([排気量cc],-1,1)/1000 from [車両データテーブル] 結果 658 0.65 0.65 2990 2.99 2.99 3630 **3.62** 3.63 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: banker's roundingのことをSQLでROUND関数を使う人は覚えておくべきです。 端数処理 - Wikipedia Round() 関数は四捨五入関数ではない: ITコンサルタント 市井賢児のメモ もしも四捨五入だと訳している解説があったら焼き捨ててください。 被除数に0.5を足してから割って、整数値部分のみ採用してください。 FLOOR()で指定桁位置で切り捨てできますので。