0

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

a = myvar.to_s

此解决方案在大多数情况下都有效,但例如当 myvar 为“7.50”时,“a”将为“7.5”

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

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

4

2 回答 2

3

只要确保您一开始就没有使用任何CSV 转换器。因此,例如,而不是:

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"

于 2013-09-17T14:32:41.597 回答
2

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

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

于 2013-09-17T14:17:31.560 回答