理解できない奇妙な問題があります。データベースに小数として通貨を保存しています。CSVファイルから読み取り、文字列を10進数に変換して、データベースに保存しています。データベースを調べたときに値が正しく保存されていないようです。ほとんどは正しく保存されていますが、何らかの理由で、私が持っている1000の値は1として保存され、2299は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番号が正しく読み取られていない場合は、可能であると思います。
助けてくれてありがとう、
トム