15

decimal.Decimalランダムインスタンスを取得するにはどうすればよいですか?ランダムモジュールは、Decimalsに変換するためのピタであるfloatのみを返すようです。

4

7 に答える 7

28

「乱数」とは何ですか? Decimal には任意の精度があるため、Decimal に保持できる限りの乱数を生成すると、マシンのメモリ全体を格納する必要があります。

乱数に必要な精度の 10 進数の桁数を知る必要があります。その時点で、ランダムな整数を取得してそれを割るのは簡単です。たとえば、ポイントの上に 2 桁、分数に 2 桁が必要な場合 (ここで randrangeを参照):

decimal.Decimal(random.randrange(10000))/100
于 2009-01-13T15:09:41.450 に答える
16

標準ライブラリ リファレンスから:

float から Decimal を作成するには、最初にそれを文字列に変換します。これは、変換の詳細 (表現エラーを含む) を明示的に思い出させるものとして機能します。

>>> import random, decimal
>>> decimal.Decimal(str(random.random()))
Decimal('0.467474014342')

これはあなたが意味するものですか?それは私にはピタのようには見えません。任意の範囲と精度にスケーリングできます。

于 2009-01-13T14:44:36.790 に答える
9

カンマの前後に必要な桁数がわかっている場合は、次を使用できます。

>>> import decimal
>>> import random
>>> def gen_random_decimal(i,d):
...  return decimal.Decimal('%d.%d' % (random.randint(0,i),random.randint(0,d)))

...
>>> gen_random_decimal(9999,999999) #4 digits before, 6 after
Decimal('4262.786648')
>>> gen_random_decimal(9999,999999)
Decimal('8623.79391')
>>> gen_random_decimal(9999,999999)
Decimal('7706.492775')
>>> gen_random_decimal(99999999999,999999999999) #11 digits before, 12 after
Decimal('35018421976.794013996282')
>>>
于 2009-01-13T14:56:32.787 に答える
2

random モジュールには、「浮動小数点数のみを返す」だけではありませんが、とにかく:

from random import random
from decimal import Decimal
randdecimal = lambda: Decimal("%f" % random.random())

それとも、あなたの質問で何か明らかなことを見逃していましたか?

于 2009-01-13T16:04:14.210 に答える