質問

ランダムな decimal.Decimal インスタンス? randomモジュールは、Decimalに変換するピタであるfloatのみを返すようです。

役に立ちましたか?

解決

「ランダム小数」とは何ですか? Decimalには任意の精度があるため、Decimalで保持できる限りランダムな数値を生成すると、マシンのメモリ全体が格納されます。

乱数に必要な精度の小数点以下の桁数を知る必要があります。この時点で、ランダムな整数を取得して除算するのは簡単です。たとえば、ポイントの上2桁と小数部の2桁が必要な場合(ここでの範囲):

decimal.Decimal(random.randrange(10000))/100

他のヒント

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

フロートからDecimalを作成するには、最初にそれを文字列に変換します。これは、変換の詳細(表現エラーを含む)の明示的なリマインダーとして機能します。

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

これはどういう意味ですか?それは私にはピタのようではありません。任意の範囲と精度にスケーリングできます。

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

>>> 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')
>>>

ランダムモジュールには、「フロートのみを返す」よりも多くの機能がありますが、とにかく:

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

またはあなたの質問で明らかな何かを見逃しましたか?

decimal.Decimal(random.random() * MAX_VAL).quantize(decimal.Decimal('.01'))

ランダム小数を作成する別の方法。

import random
round(random.randint(1, 1000) * random.random(), 2)

この例では、

  • random.randint()は、指定された範囲(包括的)でランダムな整数を生成します、
  • random.random()は、範囲(0.0、1.0)のランダムな浮動小数点数を生成します
  • 最後に、 round()関数は、上記の値の乗算結果(254.71921934351644のような長さ)を小数点以下の指定された数値に丸めます(この例では254.71になります)
import random
y = eval(input("Enter the value of y for the range of random number : "))
x = round(y*random.random(),2)  #only for 2 round off 
print(x)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top