gpt4 book ai didi

python - 如何将 pythons Decimal() 类型转换为 INT 和指数

转载 作者:太空狗 更新时间:2023-10-29 18:30:34 24 4
gpt4 key购买 nike

我想在 python 中使用 Decimal() 数据类型并将其转换为整数和指数,这样我就可以将该数据发送到具有完全精度和小数控制的微 Controller /plc。 https://docs.python.org/2/library/decimal.html

我已经让它工作了,但是它很老套;有谁知道更好的方法?如果不是,我会采取什么途径自己编写较低级别的“as_int()”函数?

示例代码:

from decimal import *
d=Decimal('3.14159')
t=d.as_tuple()
if t[0] == 0:
sign=1
else:
sign=-1

digits= t[1]
theExponent=t[2]
theInteger=sign * int(''.join(map(str,digits)))

theExponent
theInteger

对于那些没有编写 PLC 程序的人,我的替代方法是使用 int 并在两个系统中声明小数点,或者使用 float (只有一些 PLC 支持)并且是有损的。所以你可以明白为什么能够做到这一点会很棒!

提前致谢!

最佳答案

你可以这样做:

[这比其他方法快3倍]

d=Decimal('3.14159')

list_d = str(d).split('.')
# Converting the decimal to string and splitting it at the decimal point

# If decimal point exists => Negative exponent
# i.e 3.14159 => "3", "14159"
# exponent = -len("14159") = -5
# integer = int("3"+"14159") = 314159

if len(list_d) == 2:
# Exponent is the negative of length of no of digits after decimal point
exponent = -len(list_d[1])
integer = int(list_d[0] + list_d[1])



# If the decimal point does not exist => Positive / Zero exponent
# 3400
# exponent = len("3400") - len("34") = 2
# integer = int("34") = 34

else:
str_dec = list_d[0].rstrip('0')
exponent = len(list_d[0]) - len(str_dec)
integer = int(str_dec)

print integer, exponent

性能测试

def to_int_exp(decimal_instance):

list_d = str(decimal_instance).split('.')

if len(list_d) == 2:
# Negative exponent
exponent = -len(list_d[1])
integer = int(list_d[0] + list_d[1])

else:
str_dec = list_d[0].rstrip('0')
# Positive exponent
exponent = len(list_d[0]) - len(str_dec)
integer = int(str_dec)

return integer, exponent

def to_int_exp1(decimal_instance):
t=decimal_instance.as_tuple()

if t[0] == 0:
sign=1
else:
sign=-1

digits= t[1]

exponent = t[2]

integer = sign * int(''.join(map(str,digits)))

return integer, exponent
计算两种方法 100,000 次循环所花费的时间:
ttaken = time.time()
for i in range(100000):
d = Decimal(random.uniform(-3, +3))
to_int_exp(d)
ttaken = time.time() - ttaken
print ttaken

字符串解析方法花费的时间:1.56606507301

ttaken = time.time()
for i in range(100000):
d = Decimal(random.uniform(-3, +3))
to_int_exp1(d)
ttaken = time.time() - ttaken
print ttaken

转换为元组然后提取方法所花费的时间:4.67159295082

关于python - 如何将 pythons Decimal() 类型转换为 INT 和指数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24944863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com