修剪尾随.0

Dan*_*man 15 ruby excel ruby-2.0 roo-gem

我有一个包含部件号的Excel列.这是一个例子

正如你所看到的,也可以是多种不同的数据类型:Float,Int,和String.我正在使用roogem来读取文件.问题是roo将整数单元解释为Float,向它们添加尾随零(16431 => 16431.0).我想修剪这个尾随零.我无法使用,to_i因为它将修剪其中需要小数的单元格的所有尾随数字(上例中的第一行),并将在行中的字符串char String(上例中的最后一行)之后剪切所有内容.

目前,我有一个方法,检查单元格的最后两个字符,如果它们是".0"则修剪它们

def trim(row)
    if row[0].to_s[-2..-1] == ".0"
        row[0] = row[0].to_s[0..-3]
    end
end
Run Code Online (Sandbox Code Playgroud)

这很有效,但感觉非常糟糕.将Excel文件内容转换为Ruby数据结构的正确方法是什么?

saw*_*awa 42

def trim num
  i, f = num.to_i, num.to_f
  i == f ? i : f
end

trim(2.5) # => 2.5
trim(23) # => 23
Run Code Online (Sandbox Code Playgroud)

或者,从字符串:

def convert x
  Float(x)
  i, f = x.to_i, x.to_f
  i == f ? i : f
rescue ArgumentError
  x
end

convert("fjf") # => "fjf"
convert("2.5") # => 2.5
convert("23") # => 23
convert("2.0") # => 2
convert("1.00") # => 1
convert("1.10") # => 1.1
Run Code Online (Sandbox Code Playgroud)


小智 23

对于那些使用Rails的人来说,number_with_precision有一个strip_insignificant_zeros: true方法可以使用number_with_precision参数来处理这个问题.

number_with_precision(13.00, precision: 2,  strip_insignificant_zeros: true)
# => 13
number_with_precision(13.25, precision: 2,  strip_insignificant_zeros: true)
# => 13.25
Run Code Online (Sandbox Code Playgroud)

http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_with_precision