在这个例子中:
long_ten = 10**21
print(' type(long_ten):', type(long_ten))
print(' long_ten: {:52,f}'.format(long_ten))
tenth = 0.1
print(' type(tenth):', type(tenth))
print(' float(52f): {:52.52f}'.format(tenth))
float_res = tenth * long_ten
print('\n type(float_res):', type(float_res))
print(' float(52f): {:15.52f}'.format(float_res))
为什么将long和float结果乘以具有十进制精度的浮点数?
type(long_ten): <type 'long'>
long_ten: 1,000,000,000,000,000,000,000.000000
type(tenth): <type 'float'>
float(52f): 0.1000000000000000055511151231257827021181583404541016
type(float_res): <type 'float'>
float(52f): 100000000000000000000.0000000000000000000000000000000000000000000000000000
我希望结果是:
100000000000000005551.1151231257827021181583404541016...
我理解为什么结果类型是float - b / c它比long长
注意 - 这是使用python 2(如果重要)
答案 0 :(得分:2)
100000000000000000000可表示为float:
>>> n = 100000000000000000000
>>> int(float(n))
100000000000000000000L
下一个较大的浮点数是100000000000000016384:
>>> from itertools import count
>>> next(int(float(i)) for i in count(n) if int(float(i)) != n)
100000000000000016384L
因此,最接近预期的100000000000000005551.115 ...的浮点数是100000000000000000000,这就是你得到的。
为什么浮动这个大的总是整数?好吧,你可以用二进制看到它已经是67位了:
>>> bin(n)
'0b1010110101111000111010111100010110101100011000100000000000000000000'
>>> len(bin(n)[2:])
67
但是floats only store the most significant 53 bits。因此,由于前端值为2 66 ,尾部位已经值2 66-52 = 16384.正如我们已经在上面看到的那样。所以所有53位都是值整数,因此整数也是一个整数。
答案 1 :(得分:0)
浮点数只是一组特定的分数,其分母是2的幂.2 ^ - n 在小数点后有 n 位数,所以a {{ 1}}可以轻松拥有53个非零数字(大数字更多,因为2的幂不是10的幂)。你只是打印(差不多)那个“满”的号码;我们通常不这样做,因为除了前16个(或左右)之外的所有只是前几个确定的“噪音”。