簡體   English   中英

在Rails中導入帶有長數字的CSV

[英]Import CSV with long numbers in Rails

我將使這個問題保持簡單。

我正在嘗試將CS​​V文件導入我的應用程序。 該文件中包含長數字,例如:“ 9405510200830754182150”

但是當導入文件時,數據如下所示:“ 9.40551e + 21”

有誰知道如何解決這個問題?

這是我正在使用的代碼

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

UPDATE

感謝您的評論,我不確定為什么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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM