一時的に整数に変換される (丸められる) double に mod 演算子を実装しようとしていますが、コンパイラ (clang) はそれを好まないようで、エラーを返します: assignment to cast is illegal, lvalue casts are not supported
. たとえば、このスニペットでは
double a;
int b;
(int)a %= b;
この制限を回避する方法はありますか?
あなたのしていることは違法です。このように整数に(int)a = ...
キャストできないため、言うことは違法です。a
割り当ての右側にキャストする必要があります。
本当にやりたいのなら、次のように言えます。
double a;
int b;
a = (double)((int)a % b); /* Casting to a double at this point is useless, but because a is a double-type, the result of the modulus it will be implicitly casted to a double if you leave out the explicit cast. */
モジュラスの結果を新しい int 変数に割り当てることをお勧めしますが、それはあなたの選択です。
編集:これはこれの例です:http://ideone.com/tidngT
また、double を int にキャストしても丸められず、単に切り捨てられることに注意してください。また、 double の値が an の範囲よりも大きい場合、int
未定義の動作が発生する可能性があります。