3

Java では、 ~ の間の数値をランダムに生成する必要が0あり0.06ます。

ここの別の質問で、次のコードでうまくいくことがわかりました。

Random generator = new Random();
double number = generator.nextDouble() * .06;

0.007044013589130205ただし、これを行うと、 や のような非常に長い数値が得られます0.03656588431980957。これは、インストラクターが探しているものではないと思います。

とにかく、小数点以下 2 桁または 3 桁しかない 0 から 0.06 の間の乱数を生成する方法はありますか?

4

4 に答える 4

9

の間の範囲の数値が[0 - 0.06]の差で0.01必要な場合は、次の操作を実行できます。

Random generator = new Random();
int number = generator.nextInt(7);
double result = number / 100.0;

数式をnumber = generator.nextInt(max - min + 1) + min;どこにmax一般化することができmin、それぞれ生成する最大数と最小数になります。これにより、 から数値が生成され[min to max+1]ます。

生成された数値の小数点以下の桁数を増やすには、その数値を適切な 10 の累乗 (たとえば、 1000、10000、...) で割るだけです。

于 2013-04-11T04:40:28.713 に答える
4

内部的には、Javadouble値は 2 進浮動小数点表現です。小数点以下の桁数はありません。double は、指定された小数点以下の桁数を持つ 10 進数の文字列として書式設定できます。たとえば、小数点以下 3 桁 (精度 0.001) を取得するには、次のようにします。

String formatted = String.format("%.3f", number);

数値を計算する必要がなく、小数点以下 2 桁または 3 桁が必要な場合は、出力して0.0から 00 から 60 (両端を含む) までの 2 桁のランダムな整数を入力します。

于 2013-04-11T04:40:35.650 に答える
3

精度を0.001にする必要があると思いますので、これを試してください:

    Random r = new Random();
    int ret = r.nextInt(60 + 1);
    return ret / 1000.0;

これにより、0.001の倍数の差で平均的に[0,0.060]が生成されます。これが必要な場合があります

于 2013-04-11T04:50:57.263 に答える
1

あなたは売上税を扱っているので、通貨を表すために Double または Float を使用しない理由に注意する必要があります。BigDecimal を使用して通貨を操作する

BigDecimal範囲と有効桁数に制約のある乱数を生成するには、Java でランダムな BigDecimal を作成するにはどうすればよいですか? を参照してください。

于 2013-04-11T04:45:14.433 に答える