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)
| 归档时间: |
|
| 查看次数: |
11413 次 |
| 最近记录: |