我正在尝试将字符串转换为数字。它可以是float,integer或空字符串。
def num(s):
if not s: return ""
try:
return int(s)
except ValueError:
return float(s)
else: return 0
str1 = ""
str2 = "0.0"
str3 = "1.1"
str4 = "10"
print("str1 = "+str(num(str1)))
print("str2 = "+str(num(str2)))
print("str3 = "+str(num(str3)))
print("str4 = "+str(num(str4)))
所以,输出:
str1 = <== OK
str2 = 0.0 <== I need this as integer 0
str3 = 1.1 <== OK
str4 = 10 <== OK
任何人都可以提供帮助吗?
答案 0 :(得分:2)
"0.0"
不是有效的整数字符串。如果要将零舍入为整数,则在转换为浮点数后执行此操作。
def num(s):
if not s: return ""
try:
return int(s)
except ValueError:
f = float(s)
if f%1.0 < 0.0005:
return int(f)
else:
return f
else: return 0
答案 1 :(得分:1)
试试这个:
直播示例@ http://codepad.org/9xIbFxJ1
def num(s):
if not s:
return ""
try:
list_s = s.split(".")
# If there is no fractional part or fractional part is 0 return int(s) else float(s)
if ( len(list_s) == 1 ) or ( int(list_s[1]) == 0 ):
return int(s)
else:
return float(s)
except:
return 0
答案 2 :(得分:1)
试试这个:
def num(s):
if not s:
return ""
try:
return int(s)
except ValueError:
return float(s) or 0
else:
return 0
按预期工作:
num('')
=> ''
num('0.0')
=> 0
num('1.1')
=> 1.1
num('10')
=> 10
答案 3 :(得分:0)
你可以这样检查。如果数字的float和int是相同的那么它是一个int,否则它就是一个浮点数。
def make_number(n):
try:
n = float(n)
if n == int(n):
return int(n)
return float(n)
except ValueError:
return 0
编辑:我认为int(&#34; 1.2&#34;)会强制为1,我错了。
答案 4 :(得分:-1)
float(s)可以直接将字符串转换为float;和int(float(s))将float转换为整数。这里我们只需要一个小数字来检查浮点数是否可以是整数。
def num(s):
if s == '':
return ''
else:
if float(s) < int(float(s)) + 0.0000000000001:
return int(float(s))
else:
return float(s)