浮点排序和比较

  • 本文关键字:比较 排序 ruby
  • 更新时间 :
  • 英文 :


我正在做一些练习来帮助理解各种枚举在后台是如何工作的。为此,我必须使用 .each 解决问题,然后用我正在处理的枚举解决相同的问题,在本例中.sort_by。我已经弄清楚了所有问题,除了如何实际比较这些浮点数中的美分(即小数位)。

在我的代码中,转换将是一个数组数组。转换中的每个数组都将包含要比较的实际数据以及数据的来源价格。因为这是每次迭代,所以我无法对数据进行硬编码以进行比较。因为它是一个浮点数而不是一个字符串或数组,所以我不能告诉我的代码来比较 price[-2..-1],就像我可能比较字符串/数组一样。我不能将每个价格乘以 100 并比较它们,因为这会比较整个金额,而不仅仅是所需的美分。

def test_sort_by_number_of_cents
prices = [3.02, 9.91, 7.9, 10.01, 11.0]
transformed = []
prices.each do |price|
transformed << [X, price]
end
transformed = transformed.sort 
sorted = []
transformed.each do |sort_key, price|
sorted << price 
end 
assert_equal [11.0, 10.01, 3.02, 7.9, 9.91], sorted
end

预期结果可以在断言中看到:[11.0, 10.01, 3.02, 7.9, 9.91]

我的回答:

prices = [3.02, 9.91, 7.9, 10.01, 11.0]
result = prices.sort_by do |price|
price.modulo(1)
end
p result

或:

prices = [3.02, 9.91, 7.9, 10.01, 11.0]
result = prices.sort_by do |price|
price - price.to_i
end
p result

最新更新