none
STR関数について RRS feed

  • 質問

  • http://msdn.microsoft.com/ja-jp/library/ms189527.aspx

    こちらのstr関数のライブラリを見たところ、下記のように四捨五入されていました。

    SELECT STR(123.45, 6, 1);
    GO
    
    ------
     123.5
    
    (1 row(s) affected)
    

    しかし、実際2008 R2環境でstr関数を利用したところ、

    四捨五入がされませんでした。

    select str(7.545,18,2)

    7.54

    何か設定が必要なのでしょうか。

    ご存知の方、教えて頂けないでしょうか?

    2011年5月26日 0:50

回答

  • 浮動小数点の問題です。

    文字列として7.545と書きますが、内部データとしてはこの値に最も近い浮動小数点値で格納され、正確には7.544999999...になっています。このことは

    SELECT STR(7.545,40,30)

    とかやってみると見ることができます。そして、7.544999...を四捨五入すると7.54になってしまいます。

    一応KB154000を見つけましたがそういうことです。

    • 回答としてマーク 山本春海 2011年6月2日 8:23
    2011年5月26日 1:37
  • 佐祐理さん

    ご返信ありがとうございます。

    とても参考になりました。

    実際に下記を実行して、確認ができました。

    SELECT STR(7.545,40,30) ⇒ 7.5449999999999999

    SELECT STR(123.45,40,30) ⇒ 123.4500000000000000

    SELECT STR(123.45,18,1) ⇒ 123.5

    大変ありがとうございました!!!

     

    • 回答としてマーク susachiko 2011年6月20日 6:51
    2011年5月26日 7:00

すべての返信

  • 浮動小数点の問題です。

    文字列として7.545と書きますが、内部データとしてはこの値に最も近い浮動小数点値で格納され、正確には7.544999999...になっています。このことは

    SELECT STR(7.545,40,30)

    とかやってみると見ることができます。そして、7.544999...を四捨五入すると7.54になってしまいます。

    一応KB154000を見つけましたがそういうことです。

    • 回答としてマーク 山本春海 2011年6月2日 8:23
    2011年5月26日 1:37
  • 佐祐理さん

    ご返信ありがとうございます。

    とても参考になりました。

    実際に下記を実行して、確認ができました。

    SELECT STR(7.545,40,30) ⇒ 7.5449999999999999

    SELECT STR(123.45,40,30) ⇒ 123.4500000000000000

    SELECT STR(123.45,18,1) ⇒ 123.5

    大変ありがとうございました!!!

     

    • 回答としてマーク susachiko 2011年6月20日 6:51
    2011年5月26日 7:00