在Rails中导入长数字的CSV

时间:2014-08-01 20:59:05

标签: ruby-on-rails ruby csv

我将保持这个问题的简单。

我正在尝试将CS​​V文件导入我的应用程序。 该文件中包含长数字,例如:" 9405510200830754182150"

但是在导入文件时,数据如下所示:" 9.40551e + 21"

有谁知道怎么解决这个问题?

以下是我正在使用的代码

CSV.foreach(file.path, headers: true) do |row|
   puts "row: #{row.inspect}"
end

更新

感谢您的评论,我不知道为什么CSV会将该数字转换为浮点数我需要将其保留为字符串。

我应该澄清一下,我正在为这个项目使用Rails 3.2.18

如果您想重现我的代码:

1.用9405510200830754182150创建CSV

2.将此代码运行到终端:

file = File.join(Rails.root, 'tracking.csv')
CSV.foreach(file, headers: true) do |row|
   puts "row: #{row.inspect}"
end

我需要能够保持" 9405510200830754182150"是一个字符串,因为这是一个订单的跟踪号,需要存储在数据库中

3 个答案:

答案 0 :(得分:1)

您确定"9.40551e+21"不是视觉逼近吗?试试这个:

CSV.foreach(file.path, headers: true) do |row|
  puts row['my_numeric_header']
end

答案 1 :(得分:0)

默认情况下,它应该将CSV文件中的所有内容视为字符串。您可以尝试转换器:数字选项

CSV.foreach(file.path, headers: true, converters: :numeric) do |row|
  puts "row: #{row.inspect}"
end

将数字解释为适当的类型。否则,您可能必须调试CSV模块代码以确定发生了什么。

答案 2 :(得分:0)

:float转换器为您将您的号码转换为Float。不幸的是,Float不能容纳这么大的数字,请看评论...

[14] pry(main)> val = CSV::Converters[:float].('9405510200830754182150')
=> 9.405510200830755e+21
[15] pry(main)> val.class
=> Float
[16] pry(main)> "%d" % val
=> "9405510200830754553856"
[17] pry(main)> "%f" % val
=> "9405510200830754553856.000000"