读书人

python string to float有关问题不要

发布时间: 2012-03-05 11:54:02 作者: rapoo

python string to float问题,不要看着这么简单,请入内
现在要做一个转换,把string类型转为float
其实float()功能是可以转换的,
但是如果string 为 "00123.456" 或".123456" 或 "0012.3645"的情况先,float()不会抛出异常,而转换成123.456, 0.123456和12.3645等,

我想有没有比较严格的float函数,对于一些错误的书写,直接抛出异常?

我开始用正则写:

def StrToFloat(float_string):
if not re.match(r"^[+-]?(?:0|[1-9]\d*)(\.\d+)?$", float_string):
raise ValueError()
return float(float_string)
会发现1000000需要20秒多的时间,而简单的float 只需要5秒多的时间。
因为我们这个项目的时间、性能要求比较严格,所以有没有什么好的办法,来减少时间的损失,正确的转换或抛出异常?



[解决办法]
最好不要抛异常,抛异常导致的性能损失是可观的.

[解决办法]

探讨
最好不要抛异常,抛异常导致的性能损失是可观的.


[解决办法]
你的问题分步骤解
第一 判定是不是有效的数字
第二 格式化成标准串 比 有效数.有效数 自己定义
第三 输出正确的类型


[解决办法]
可以试试用简单字串方法startswith处理,譬如转出<1且>-1间就检查字串开头必要是'0.' '+0.' '-0.', >=1或<=-1的就检查开头是否不能'0' '+0' '-0',这样应该比正则有效率多...
[解决办法]
我有个主意:先把字符a转换成数字x,再把数字x转换成字符b,最后看看a==b ? LZ看看是否可行
[解决办法]
def stf(s):
if s.startswith('0') or '.' in s and len(s.split('.')[-1]) > 2:
raise ValueError()
return float(s)


不知行不, 比 re 快很多.....

[解决办法]
看了 学习了
[解决办法]
引用
判断有效数字 现在还不知道有什么办法能更高效。

[解决办法]
先转换成float,如果出错了就是非法的。如果成功了,检查下是不是以00开头,是不是以.开头,是不是.结尾,是不是包含.并且以0结束,如果是,非法。

读书人网 >perl python

热点推荐