我试图得到(pow(10,i) – 1)/ 23的小数部分为0
(pow(10, i) - 1)/23 % 1
在Python 3中,但是对于i大于17的所有值,我得到0.0.
如何在Python中提取大整数的小数部分?
解决方法:
为了保持精度,我可能会使用fractions模块:
>>> from fractions import Fraction
>>> Fraction(10)
Fraction(10, 1)
>>> Fraction(10)**50
Fraction(100000000000000000000000000000000000000000000000000, 1)
>>> Fraction(10)**50-1
Fraction(99999999999999999999999999999999999999999999999999, 1)
>>> (Fraction(10)**50-1)/23
Fraction(99999999999999999999999999999999999999999999999999, 23)
>>> ((Fraction(10)**50-1)/23) % 1
Fraction(5, 23)
>>> float(((Fraction(10)**50-1)/23) % 1)
0.21739130434782608
虽然使用decimal模块将是另一种选择.
更新:等等,第二个想法,这里的答案总是((10 ^ n-1)%23)/ 23,所以上面是显着的过度杀伤(虽然它确实扩大到更复杂的问题).我们甚至可以利用三参数pow调用:
>>> pow(10, 50, 23)
6
>>> pow(10, 50, 23) - 1
5
>>> (pow(10, 50, 23) - 1) % 23 # handle possible wraparound
5
>>> ((pow(10, 50, 23) - 1) % 23) / 23.0
0.21739130434782608
标签:python