我将保持这个问题的简单。
我正在尝试将CSV文件导入我的应用程序。 该文件中包含长数字,例如:" 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"是一个字符串,因为这是一个订单的跟踪号,需要存储在数据库中
答案 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"