割り算に注意 除算は最後に行う

筆者がよくやる掛算・割り算の順序ミスとキャスト漏れの例である。

売上利益率=利益÷売上×100であるが、次のようにロジックを書くと思わぬ結果になってしまう。
とすると、利益率は15%となるべきだが、riekiritsu = 0となる。
式は前から順に評価されるので、rieki / uriage = 30 / 200の時点で値はint型に丸められゼロになる。ゼロに100を掛けて最終結果はゼロとなる。正しくは、次のようにしなければならない。

また、double型で計算しているときに、うっかり下記のようにロジックを書いてしまい精度が損なわれしまうことがよくある。
利益率は19.9%になるべきなのに、19.0となってしまう。これは100がint型であるため、rieki * 100の計算結果が、int型になり、その結果、rieki *100 / uriageの計算結果がint型の19になってしまい、最終結果が19.0となってしまう。
正しくは、100をdouble型にキャストして計算しなければならない。

トラックバック

トラックバックURL:
http://www.apricot-jp.com/cgi/mt/mt-tb.cgi/324

関連情報

・Microsoft JScript 実行時エラー:オブジェクトを指定してください。
・このログインで要求されたデータベースXXX を開けません。ログインに失敗しました。ASPNET はログインできません
・Logging Application Blockのトラブルシューティング
・IISのログ出力先
・このログインで要求されたデータベースXXX を開けません。ログインに失敗しました。ASPNET はログインできません
・C# 3.5 yieldの読み方
・ASP.NET サーバーサイドのイベント処理の順番
・ASP.NETのWebページでグーグルアドセンスを貼り付ける方法
・IIS メタベースにアクセスできませんでした
・VSSで管理されているプロジェクトは、ファイルの名前の変更や移動は極力行わない方が良い
・Oracle 9.2へOLE DB接続する方法
・単体テストのデータ
・この行は既に別のテーブルに属しています
・データベースのバージョンは 655 なので、開けません。
・証明書ストアでマニフェスト署名用の証明書が見つかりません。
・次のモジュールは最適化を有効にされて、またはデバッグ情報なしでビルドされました
・String.Concatメソッドを使った文字列の連結
・ファイルの存在をチェックする
・テキストファイルをロードし文字列を読み込むサンプル
・任意の数の引数を受け取るメソッド

Copyright(C) 2007 アーキテクト360 Allrights reserved.