web-dev-qa-db-ja.com

ダートの整数除算

エラーが発生するため、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

26
user905864

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タイプを使用することをお勧めします。

26
gthacoder

整数除算は

c = a ~/ b;

あなたも使うことができます

c = (a / b).floor();
c = (a / b).ceil();

分数の処理方法を定義する場合。

20

短い答え

c = a ~/ bを使用します。

長い回答

ドキュメントによると、intは小数点のない数値であり、doubleは小数点のある数値です。

doubleintはどちらもnumのサブタイプです。

/演算子を使用して2つの整数を除算すると、結果はdoubleに評価されます。そして、c変数は整数として初期化されました。できることは少なくとも2つあります。

  1. c = a ~/ bを使用します。

~/演算子はintを返します。

  1. var c;を使用します。これにより、doubleintStringなど、任意の型に割り当てることができる動的変数が作成されます。
0
Iyanuoluwa Ajao