8位十进制数的分割和重构



我正试图找出一种方法来分割一个数字碎片,当我后来添加它们得到相同的结果。例如,需要以下伪代码:

  1. 取小数点后8位的数字:2.22222222
  2. 从#1中随机减去8位小数,并将其存储到列表
  3. 重复#2直到#1为0.00000000
  4. 将每个列表项相加,得到2.22222222

我尝试了几个实现,但他们都是无用的,这就是为什么我不提供任何到目前为止的代码…谢谢你。

@user3745919,你们的需求(2)和(3)没有明确定义。用一组随机数减去另一组随机数不一定完全等于零。

也就是说,这里是使用Python 2.7 decimal模块的一个相当字面化的解释。请注意,由于我刚才提到的问题,生成的列表的总和将不等于原始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

最新更新