我需要分配一些可以是字符串,整数或浮点数的对象,但我总是需要将它们存储为字符串。
a = myvar.to_s
此解决方案大部分时间都有效,但当例如myvar为“7.50”时,“a”将为“7.5”
我的需要是拥有与原始小数位数相同的小数位数。有没有办法告诉ruby我正在阅读的变量将是一个字符串,无论它看起来像什么。
编辑:我正在从csv文件导入数据,我正在寻找一种方法来告诉ruby它将读取的所有内容都是字符串,无论它看起来像是整数还是浮点数。 例如,我可以有“7”,“5.5000”,“5.5”等值。答案 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
这样的内容。
如果要指定特定的精度,则只能在此时或浮动转换为字符串后执行此操作。