Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。538件1以下はSQLServerで扱っているデータです。+4.3+5.1+4.3+9.9+0.5+0.5)とした場合、@Valueの値は2.480000000000000e+002となっています。この値に100を掛ける、FLOOR(@Value)とする@Valueを100で割り戻すとなぜか、2.470000000000000e+002となってしまいます。値が減るのか、どうしてもわかりません。どなたか、ご教授お願いします。票5切り捨て誤差の影響によるものです。0111...となります。ここでは、小数点以下24桁まで書いてありますが、循環小数なのでずっと永遠に続きます。これは、1/3を10進数で表現すると、0.33333333...と永遠に続くのと同様です。計算機で表現できる桁数(ビット数)には限りがありますから、どこかの桁より先は切り捨てられます。0111を10進数に戻すと、2.479999959468841552734375にしかなりません。これを100倍すると、247.9999959468841552734375。Floor(247.9999959468841552734375)は247となります。このように、値を表現するのに使える桁数に限度があるために、下位の桁が切り捨てられて実際よりも小さな値になることを「切り捨て」による「誤差」と言います。電卓で、100÷3を計算し、それに3を掛けても100にならない(99.999999....になってしまい、小数点より上を見ると99にしかならない)というのも、同様に切り捨て誤差によるものです。+4.3+5.1+4.3+9.9+0.5+0.5=24.8ですので、@valueの値は0.2480000000000000e+002もしくは2.480000000000000e+001、が正しいと思います。上記の説明は、2.480000000000000e+001を想定して書いてあります。個の銅バッジとてもわかりやすい内容で感動しました。ありがとうございます。最終的な対策としては、sayuriさんの回答のようにdecimal型を使おうと思います。現象の結果を理解できて本当によかったです。|4小数型データ、浮動小数型データ、および実数型データの使用から引用します。概数型では、多くの場合、指定されたとおり正確な値が格納されません。正確な値にきわめて近い概数が格納されます。多くのアプリケーションでは指定した値と格納される概数のわずかな差は問題にはなりません。その差が問題になる場合もあります。型にはこのような概数の性質があるので、財務アプリケーション、丸めが行われる演算、等価性のチェックなど、正確な数値動作が必要な場合には、これらのデータ型を使用しないでください。型を使用してください。説明の通りで、FLOOR関数はもちろん丸めが行われる演算に該当します。Fumu7さんの回答を理解した上で、やはり、float型を最終結果として扱うのは良くないですね。ありがとうございました。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。MVCについて、スキャフォールディングコマンドにて必ず失敗します。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。