エラーが発生するため、Dartの整数除算に問題があります:'Breaking on exception:type' double 'is not a subtype of type' int 'of' c '。'
これが次のコードです。
int a = 500;
int b = 250;
int c;
c = a / b; // <-- Gives warning in Dart Editor, and throws an error in runtime.
ご覧のように、結果は2になるはずでした。つまり、「a」または「b」の除算がfloat/double値の結果になる場合でも、代わりに整数値に直接変換する必要があります。そのようなエラーを投げます。
.round()/。ceil()/。floor()を使用して回避策を持っていますが、これは私のプログラムのように十分ではありません。この小さな操作は、1回のゲームの更新で何千回も呼び出されるため重要です(またはrequestAnimationFrameで言うことができます)。
私はこれに対する他の解決策をまだ見つけていません、何かアイデアはありますか?ありがとう。
Dartバージョン:1.0.0_r30798
Dartはdouble
を使用してすべての数値を表す in Dart2js
。あなたがそれで遊んだ場合、あなたは興味深い結果を得ることができます:
コード:
int a = 1;
a is int;
a is double;
結果:
true
true
実際には、num
(forループなど)にする強い理由がない限り、数値についてはint
を使用することをお勧めします。 int
を使い続けたい場合は、次のように切り捨てを使用します。
int a = 500;
int b = 250;
int c;
c = a ~/ b;
それ以外の場合は、num
タイプを使用することをお勧めします。
整数除算は
c = a ~/ b;
あなたも使うことができます
c = (a / b).floor();
c = (a / b).ceil();
分数の処理方法を定義する場合。
短い答え
c = a ~/ b
を使用します。
長い回答
ドキュメントによると、int
は小数点のない数値であり、double
は小数点のある数値です。
double
とint
はどちらもnum
のサブタイプです。
/
演算子を使用して2つの整数を除算すると、結果はdouble
に評価されます。そして、c
変数は整数として初期化されました。できることは少なくとも2つあります。
c = a ~/ b
を使用します。~/
演算子はint
を返します。
var c;
を使用します。これにより、double
やint
やString
など、任意の型に割り当てることができる動的変数が作成されます。