将字段读为字符串,即使它是整数或浮点数

时间:2013-09-17 13:52:22

标签: ruby string csv

我需要分配一些可以是字符串,整数或浮点数的对象,但我总是需要将它们存储为字符串。

a = myvar.to_s

此解决方案大部分时间都有效,但当例如myvar为“7.50”时,“a”将为“7.5”

我的需要是拥有与原始小数位数相同的小数位数。有没有办法告诉ruby我正在阅读的变量将是一个字符串,无论它看起来像什么。

编辑:我正在从csv文件导入数据,我正在寻找一种方法来告诉ruby它将读取的所有内容都是字符串,无论它看起来像是整数还是浮点数。 例如,我可以有“7”,“5.5000”,“5.5”等值。

2 个答案:

答案 0 :(得分:3)

请确保您首先不使用任何CSV converters。例如,而不是:

CSV.parse_line("foo,7,5.5000,5.5", converters: :numeric)
#=> ["foo", 7, 5.5, 5.5]

您只需使用:

CSV.parse_line("foo,7,5.5000,5.5")
#=> ["foo", "7", "5.5000", "5.5"]

完整示例:

require 'csv'
require 'tempfile'

file = Tempfile.new(['foo', '.csv'])
file << "7.50"
file.close

CSV.foreach(file.path) do |row|
  p row[0]
  p row[0].class
end

<强>输出

"7.50"
String

在Ruby 1.8.7,1.9.3和2.0.0中测试,都返回"7.50"

答案 1 :(得分:2)

Ruby中浮点的精度不能单独调整。换句话说,没有为每个浮点设置精度的概念。假设您正在尝试将浮点数转换为字符串,那么您的描述the same number of decimals as the original one没有意义,因为没有the number of decimals of the original float这样的内容。

如果要指定特定的精度,则只能在此时或浮动转换为字符串后执行此操作。