python - 将字符串转换为数字(浮点数或整数)的问题

时间:2014-07-24 23:28:09

标签: python

我正在尝试将字符串转换为数字。它可以是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

任何人都可以提供帮助吗?

5 个答案:

答案 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)