0
我有一個奇怪的問題,我無法弄清楚。我將貨幣存儲在我的數據庫中作爲小數。我正在讀取一個CSV文件並將該字符串轉換爲一個十進制數以存儲在數據庫中。這些值在檢查數據庫時看起來似乎沒有被正確存儲,大部分存儲都是正確的,但由於某種原因,存儲爲1和2299的值爲1000,因此存儲爲2,因此在999.99以上存在明顯的問題。從數據庫中讀取十進制值時輸出錯誤
我跑了數據庫遷移如下:
def self.up
change_column(:transactions, :in, :decimal, :precision => 8, :scale => 2)
change_column(:transactions, :out, :decimal, :precision => 8, :scale => 2)
end
這裏是用來存放從CSV文件值的代碼:
def create
data = params[:dump][:file].read
FasterCSV.parse(data, :headers => true) do |row|
transaction = Transaction.new
transaction.date = Date.strptime(row[0], "%d/%m/%Y")
transaction.transaction_type = row[4]
transaction.details = row[3]
if row[7].to_f < 0
transaction.out = row[7].to_d.abs
else
transaction.in = row[7].to_d.abs
end
transaction.save
(的。ABS,是因爲錢值只是作爲負值存儲在CSV文件中)。
當我使用控制檯創建一個新的交易並轉換一個1000字符串並使用相同的方法存儲它但是,這工作正常,價值存儲爲1000.0。
有沒有人知道爲什麼會這樣?我不會有這雖然這是一個FasterCSV問題,但我想如果CSV數字沒有被正確讀取是可能的。
感謝您的幫助,
湯姆
完美的非常感謝你的建議。我沒有意識到,因爲當我在開放式辦公室打開CSV時,它刪除了所有格式,所以我只將它看作1000,甚至沒有考慮到可能有逗號。 – 2011-03-27 12:26:38