8位十进制数分裂和重构

时间:2014-06-16 18:12:16

标签: python math random decimal

我试图想出一个方法将一个数字拆分成碎片,当我后来添加它们时得到相同的结果。例如,需要以下伪代码。

  1. 取一个小数点后8位的数字:2.22222222
  2. 从#1中减去一个随机的8位小数,并将其存储到列表中
  3. 重复#2,直到#1为0.00000000
  4. 互相添加每个列表项并获取2.22222222
  5. 我尝试了几种实现,但它们都没用,这就是我不提供任何远程代码的原因...... 谢谢。

1 个答案:

答案 0 :(得分:0)

@ user3745919,您的要求(2)和(3)没有明确定义。从另一个数字中减去一系列随机数并不一定能完全达到零。

那就是说,这是一个使用Python 2.7 decimal module的相当文字化的解释。请注意,由于我刚刚提到的问题,生成的列表的总和不会加起来原始d

from decimal import *
from random import random
getcontext().prec = 8

d = Decimal('2.22222222')
print "Original value d:", d

l = []
while d > Decimal('0'):
    r = Decimal(random()).quantize(Decimal('1.00000000'))
    print "Random number in [0,1) rounded to 8 digits:", r
    l.append(r)
    d -= r

print "Sum of all random numbers:", sum(l)
print "Original d - sum:", d