在Python中将字符串转换为浮点数(并去掉小数点)

0 投票
2 回答
2681 浏览
提问于 2025-04-28 03:27

我正在尝试创建一个函数,用来导入一个包含每年人口记录的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)这个函数也可能会很有用。

撰写回答