gpt4 book ai didi

python - 将 '6E+007' 转换为十进制

转载 作者:行者123 更新时间:2023-11-28 19:44:17 24 4
gpt4 key购买 nike

我有一个 python 函数,用于检查传递的值是否为有效数字。传递的值是字符串格式。

def is_valid_numeral(text_to_check):
'''Check if passed value is a valid numeral figure'''
try:
float(text_to_check)
return True
except ValueError:
return False

传递了一个像 6E+007 这样的值,这个函数返回正确的 True。

完成上述功能后,我需要将传递的数字保存到一个 Decimal 字段中。所以我运行了一个 format_decimal 函数,如下所示

def format_decimal(value, decimals): 
'''Format a value to "n" decimal places
http://mkaz.com/solog/python/python-string-format.html
'''
try:
if decimals == 2:
value = int(value)/100
return "{:.2f}".format(int(value))
except ValueError:
raise

此时,它失败并出现错误:

`Value Error: Invalid literal for int() with base 10:6E+007`

因为这确实是一个有效的数字,只是用不同的表示法,是否有一个函数可以为我转换这种类型的值,然后通过 format_decimal 函数传递它?

最佳答案

您通过转换为 float 来检查有效性,但实际上使用 int 进行转换 - 差异导致了您的问题。

decimal 模块是转换大格式数字的最佳方式。

>>> int(decimal.Decimal('6E+007'))
60000000

您不希望对 float 然后对 int 进行双重转换,因为这会导致舍入错误。

>>> int(float('1e23'))
99999999999999991611392L
>>> int(decimal.Decimal('1e23'))
100000000000000000000000L

关于python - 将 '6E+007' 转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19532556/

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