首页 > 解决方案 > Ruby to_f 不返回任何内容或 0.0

问题描述

使用字符串到浮点转换to_f对我不起作用。

我正在尝试从经度和纬度数据中选择一列,如下所示。

"136.98355","35.130433333333336","2013-07-31T22:37:12+09:00","2346","13066","42","0","0","0"
"136.98363333333333","35.1306","2013-07-31T22:38:13+09:00","1311","13580","41","0","0","0"
"136.98361666666668","35.130583333333334","2013-07-31T22:39:13+09:00","3946","13580","41","0","0","0"

当我使用下面的代码简单地抓取该列时,它可以工作。

ruby -e "STDIN.readlines.each do |line| col = line.chomp.split(','); puts col[0] end" < new.csv > picked_nagoya.csv

结果:

"136.98355"
"136.98363333333333"
"136.98361666666668"

但是当我申请to_f将字符串转换为浮点数时,文件picked_nagoya.csv是空的。

我试图通过将转换后的字符串存储到变量中然后将其写入文件来解决它。但是,它随后返回 0.0s。

ruby -e "STDIN.readlines.each do |line| col = line.chomp.split(','); f =  col[0].to_f; puts f end" < new.csv > picked_nagoya.csv

结果:

0.0
0.0
0.0

我在这里做错了什么?

标签: ruby

解决方案


这是因为to_fis 期望一个数字,但您尝试转换的字符串的第一个字符实际上是一个引号:"123.456"

在进行任何转换之前,您需要从字符串中删除引号:

f = col[0].delete_prefix('"').delete_suffix('"').to_f

推荐阅读