-1

Dart で数値を 10 n 回乗算する数学的な方法は、以下 (以下) よりも優れていますか? やり過ぎになるので、数学ライブラリを使用したくありません。それは大したことありません; ただし、「forループ」よりも優れた(よりエレガントな)方法、できれば1行があれば、知りたいです。

int iDecimals = 3;
int iValue    = 1;

print ("${iValue} to power of ${iDecimals} = ");
for (int iLp1 = 1; iLp1 <= iDecimals; iLp1++) {
  iValue *= 10;
}

print ("${iValue}");
4

5 に答える 5

1

数学ライブラリを使用します。そうすることが「やり過ぎ」であるというあなたの考えは見当違いです。以下は、書きやすく、読みやすく、コードの行数が少なく、置き換えたものよりもおそらく高速です。

import 'dart:math';

void main() {
  int iDecimals = 3;
  int iValue    = 1;

  print("${iValue} times ten to the power of ${iDecimals} = ");
  iValue *= pow(10, iDecimals);
  print(iValue);
}

おそらく、JavaScript にデプロイしていて、デプロイのサイズを気にしていて、それdart2jsがツリー シェーキングを行っていることに気づいていませんか?

最後に、数を 10 の累乗にpow(iValue, 10)たい場合は、要求したが実行しなかったので、単純に を使用します。

于 2013-06-02T18:55:03.610 に答える
0

何かに 10 のべき乗をかけようとしていますか? もしそうなら、Dart は科学表記法をサポートしていると思います。したがって、上記の値は次のように記述されます。iValue = 1e3;

これは 1000 に等しいです。数値自体を 10 乗したい場合は、Math ライブラリを使用するしかないと思います。

于 2013-06-02T09:22:30.457 に答える
0

基準は、答えが数学ライブラリを必要としない必要があり、高速で理想的には数学的な解決策(文字列ではない)である必要があり、指数ソリューションを使用するとオーバーヘッドが多すぎるためです-文字列、倍精度、整数、私はそれを考えます基準を満たす唯一の答えは次のとおりです。

for (int iLp1=0; iLp1<iDecimal; iLp1++, iScale*=10);

非常に高速で、「数学」ライブラリを必要とせず、ワンライナーです

于 2013-06-03T10:19:43.963 に答える