float random.uniform到python中的4位小数

时间:2015-08-21 13:55:04

标签: python random

我遇到将浮动值四舍五入到大于1的十进制数的问题。

def float_generator(size=6, chars = 6):
    return random.uniform(size,chars)

我试过

target.write(str(float_generator(7,3)))

以上返回随机浮点数为1十进制数,如1.2222,1.3333333 我想生成7位小数和3位,如7,3

所示 我尝试在下面进行四舍五入。它取而代之的是点数。

 target.write(str(format(float_generator(7,3),'.3f')))

请问我如何实现12345432.123而不是1.222343223?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

这是一个适合您的解决方案:

import random
def float_generator(size = 6, chars = 6):
    return round(random.uniform(10**(size-1),10**(size)), chars)

称之为:

float_generator(7,3)

输出示例:

2296871.988

或更好:

float_generator = lambda size, chars: round(random.uniform(10**(size-1),10**(size)), chars)

以同样的方式打电话。

答案 1 :(得分:0)

如果您希望对小数位进行微调,可以使用decimalrandom返回Decimal对象:

import random, decimal

digits = list('0123456789')
def float_generator(size = 6, chars = 6):
    base_str = ''.join(random.choice(digits) for i in range(size))
    dec_str =  ''.join(random.choice(digits) for i in range(chars))
    return decimal.Decimal(base_str + '.' + dec_str)

>>> float_generator(7,3)
Decimal('4768087.977')

Decimal个对象可以被送到浮动:

>>> float(decimal.Decimal('4768087.977'))
4768087.977

如果你总是想要一个浮点数,你可以用以下函数替换函数的最后一行:

return float(decimal.Decimal(base_str + '.' + dec_str))