5

アイテムの価格を表示しようとしています。価格にアイテムの数量を掛けます。

int itemCost = itemPrice * itemQuanity;

アイテムの数量が多すぎると、itemCostが負になります。つまり、より大きなintが必要になるため、intをint64を使用するように変更しました。

int64 itemCost = itemPrice * itemQuantity;

この変更でも、マイナスのitemCostが出力されますが、何が間違っているのでしょうか。

使ってみました

System.Convert.ToInt64(int value);

しかし、それも機能していないようで、int.MaxValueに到達したときに負の数を取得します。

4

3 に答える 3

10

タイプitemPriceとは何itemQuantityですか?両方の場合、乗算からの回答として(32ビット)intを取得し、それをに格納します。その時点で、変換(およびオーバーフロー)はすでに発生しており、にキャストしても効果はありません。intint64int64

乗算する前に、両方のオペランドがint64であることを確認する必要があります。したがって、まだの場合は、

int64 itemCost = ((int64) itemPrice) * ((int64) itemQuantity);
于 2013-02-26T17:16:54.483 に答える
7

あなたは試すことができます:

long itemCost = (long)itemPrice * (long)itemQuantity;

何が起こったのかというとint、結果をに保存したとしても、2を掛けようとしたのlongです。longそれらを最初にキャストします。

于 2013-02-26T17:15:49.383 に答える
5

2行目のコードは、の積をitemPrice * itemQuantity Int32値として計算しその結果をInt64に変換しています。乗算を行うlong 前に、値をに変換する必要があります。

long itemCost = itemPrice * (long) itemQuantity;
于 2013-02-26T17:16:44.080 に答える