我正在尝试用整个价格列中的逗号替换点。
这不起作用。
#replace dots with commas in price column
@price_column = sheet.column(15)
@price_column.each do |c|
c.to_s.gsub(".",",").to_f
end
我做错了什么?
答案 0 :(得分:2)
问题是您在浮点数格式无效的字符串上使用to_f
。 ruby to_f
仅取,
之前的数字并返回浮点数。你不应该担心将字符串转换为float。
正确的代码是:
@price_column = sheet.column(15)
@price_column.each do |c|
c.to_s.gsub!(/\./,",")
end
答案 1 :(得分:0)
您实际上是将float转换为字符串并对字符串进行更改并再次尝试转换为float类型。 以下是示例
所以点值之后的值会丢失,你再次得到2.0。 试着避免.to_f解决你的问题。
答案 2 :(得分:0)
取决于您的Excel设置you have:
逗号可以是十进制的sepator,也可以是我的设置中的de dot,逗号是分隔符,点不是数字,所以它是一个字符串:
price dot price comma
2.4 2,4
2.5 2,5
sum price dot #VALUE! sum price comma 4,9
当我用红宝石阅读时,儿子就是我的情况:
require 'spreadsheet'
book = Spreadsheet.open './Workbook1.xls'
sheet1 = book.worksheet 0
column_A = sheet1.column(0)
puts "column A"
column_A.each do |cell|
puts cell.class # this a string
puts cell.gsub(".",",")
end
puts "Colum E"
column_E = sheet1.column(4)
column_E.each do |cell|
puts cell.class #this is a float
cells.to_s.gsub(".",",")
end
结果是:
irb(main):007:0> column A
String
String
String
NilClass
NilClass
Colum E
String
Float
Float
NilClass
NilClass
=> true
在此步骤中,您有一个字符串,然后如果您convert to floa t .t_f
,excel将显示您的默认浮动格式。在红宝石中总是点