用Ruby电子表格中的逗号替换dot

时间:2016-04-18 06:49:28

标签: ruby string spreadsheet

我正在尝试用整个价格列中的逗号替换点。

enter image description here

这不起作用。

#replace dots with commas in price column
@price_column = sheet.column(15)
@price_column.each do |c|
    c.to_s.gsub(".",",").to_f
end

我做错了什么?

3 个答案:

答案 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类型。 以下是示例

  1. initial_value => 2.1
  2. 将此转换为字符串=> " 2.1"
  3. 现在正在改变。到,=> " 2,1"
  4. 然后将其更改为浮点值=> 2.0
  5. 所以点值之后的值会丢失,你再次得到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将显示您的默认浮动格式。在红宝石中总是点