解析大数

时间:2019-03-23 21:32:51

标签: python-2.7

我正在编写一些简单的代码以将基本值提高到幂 然后对输出执行一些操作。

我已经在下面包含了我现在正在使用的代码(请参阅此消息的结尾),还可以在下面立即看到当我从控制台运行脚本时的样子:

.........................................
C:\PYTHON34>python tst.py
INPUT Value: 431.1
INPUT Power Value; 1.9907
RESULT  1739.554505641426658257842063903808593750000000000000000000000000
.........................................

这是我当前正在使用的代码:

import time
e0=time.time()
c0=time.clock()

import sys
import math
from sympy import mpmath
from mpmath import *
mpmath.mp.dps = 10000


inputx = float(input('Enter inputx Value: '))
powerx =float(input('Enter Power Value; '))

inputx_squared = float((mpmath.power(inputx, powerx)))%1999

print('\r')
print('RESULT ', '%.60f' % inputx_squared)

elapsed_time=time.time() -e0
cpu_time=time.clock() -c0

print('\r')
print("CPU TIME ;", cpu_time)

我需要做的事;

1。)将小数点左边的整数值(不带小数)存储到变量= x

2。)抓住小数点右边的整个十进制值并存储在变量= y

根据一些简单规则解析(y)。这就是我的把戏。

我想做的是检查(y),看看是否有任何前导零和后导零

在示例中; “ 1739.554505 .....”如果替换为该值,则类似于以下任何内容;

1739.0554505
1739.00554505
1739.000554505

然后我要提取整数减去任何连续的前导零

下一步,我要削减数字,以便当有四个连续的尾零时,所有零都从第一个开始,前一个从前四个连续零开始,而所有后续零都是 截短

所以在我们的例子中; “ 1739.554505641426658257842063903808593750000000000000000000000000000000”

(y)变为“ 55450564142665825784206390380859375”

接下来,我想在%1999之前获得上述值的mod

这将返回“ 1407”

接下来,我想将此值作为右边的小数点作为;

1739.1407

2 个答案:

答案 0 :(得分:1)

我同意第一个评论,并建议使用字符串。

Result = 1739.554505641426658257842063903808593750000000000000000000000000
z = str(Result).split(".")
x = z[0]
y = z[1].strip("0")
mode = int(y)%1999
new_res = float(x+"."+str(mode))
print(new_res)
>>>1739.1407

strip()方法删除所有前导零和尾随零。 我也对此类操作的应用感兴趣。

答案 1 :(得分:0)

您是否考虑过使用Decimal类型:

import math
from decimal import Decimal, getcontext

getcontext().prec = 60
inputx = Decimal('431.1')
powerx = Decimal('1.9907')
inputx_squared = (inputx ** powerx) % 1999

x = math.floor(inputx_squared)
y = inputx_squared - x

给你

In: x
Out: 1739
In: y
Out: Decimal('0.554505641528269687606334953784096474037969748439285550')