在Python中将字符串转换为浮点数(并去掉小数点)
我正在尝试创建一个函数,用来导入一个包含每年人口记录的csv文件(这些记录是字符串格式)。这个文件的第三列是年份,第四列是人口数量。
我希望去掉小数点'.',然后显示处理后的总人口。
16122.83
16223.248
应该变成
1612283
16223248
当我尝试这样做时,我遇到了这个错误:在print_population_list中,year, population = row[2], float(row[3]) 发生了ValueError:无法将字符串转换为浮点数:POP。 这是我的代码:
import csv
file = csv.reader(open(filename))
year, population = 0, 0
for row in file:
year, population = row[2], float(row[3])
print year,":", population,
为了实现这个功能,我想应该先把它转换为浮点数,然后乘以小数位数最多的那个数字,最后去掉末尾的零(因为数据的小数位数不一致)。但是我在转换为浮点数时遇到了困难。
2 个回答
1
这段代码应该能解决问题。
def decToNum(s):
return int(''.join(s.split('.')))
>>> s = '16122.83'
>>> decToNum(s)
1612283
2
最直接的方法:
>>> s = '16122.83'
>>> int(s.replace('.', ''))
1612283
虽然在你的使用场景中,性能可能不是一个大问题,但根据一个简单的基准测试,替换策略比分割-连接策略快大约30%。
Benchmark Report
================
Options
-------
name | rank | runs | mean | sd | timesBaseline
--------|------|------|----------|-----------|--------------
replace | 1 | 1000 | 0.009488 | 0.0006711 | 1.0
join | 2 | 1000 | 0.01258 | 0.0007729 | 1.32589602108
Each of the above 2000 runs were run in random, non-consecutive order by
`benchmark` v0.1.5 (http://jspi.es/benchmark)
对于这个问题,int
(整数)似乎是你需要的。但对于相关的问题,使用float
(浮点数)而不是int
会让你保持在浮点数的范围内。round(value, places)
这个函数也可能会很有用。