[英]Import CSV with long numbers in Rails
我將使這個問題保持簡單。
我正在嘗試將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”為字符串,因為這是訂單的跟蹤號,需要存儲在數據庫中
您確定"9.40551e+21"
不是視覺近似值嗎? 嘗試這個:
CSV.foreach(file.path, headers: true) do |row|
puts row['my_numeric_header']
end
默認情況下,應該將CSV文件中的所有內容都視為字符串。 您可以嘗試使用轉換器:數字選項
CSV.foreach(file.path, headers: true, converters: :numeric) do |row|
puts "row: #{row.inspect}"
end
它將數字解釋為適當的類型。 否則,您可能必須調試CSV模塊代碼以了解發生了什么。
: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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.