我有一个奇怪的问题,我就是想不通。我将货币作为小数存储在我的数据库中。我正在读取 CSV 文件并将字符串转换为十进制以存储在数据库中。检查数据库时,这些值似乎没有正确存储,大多数都正确存储,但由于某种原因,我拥有的值 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 数字没有被正确读取,这是可能的。
谢谢你的帮助,
汤姆