【问题标题】:Exchange Rate return in Ruby [closed]红宝石的汇率回报[关闭]
【发布时间】:2019-07-21 13:19:53
【问题描述】:
require 'json'
require 'date'

module Exchange
  file = File.read('./data/data.json')
  data_hash = JSON.parse(file)

  def self.rate(date, from_currency, to_currency)
    date = date.strftime('%Y-%m-%d')
    raise 'That date does not exist' unless data_hash[date]

    data_hash[date][to_currency] / data_hash[date][from_currency]
  end
end

此方法必须将date 上的from_currencyto_currency 之间的汇率作为浮点数返回。

我已经包含了一个基于欧元的货币汇率 JSON 文件。我需要将此作为您的货币汇率来源

另外,未来文件的格式可以是json以外的任何格式。它还应该支持欧元以外的其他货币。 (我不知道我该怎么做)

json 文件如下所示:

{
  "2018-12-11": {
    "USD": 1.1379,
    "JPY": 128.75,
    "BGN": 1.9558,
    "CZK": 25.845,
    "DKK": 7.4641,
    "GBP": 0.90228,
    "HUF": 323.4,
    "PLN": 4.2983,
    "RON": 4.6557,
    "SEK": 10.297,
    "CHF": 1.1248,
    "ISK": 140.2,
    "NOK": 9.7038,
    "HRK": 7.3943,
    "RUB": 75.5225,
    "TRY": 6.1295,
    "AUD": 1.5778,
    "BRL": 4.4417,
    "CAD": 1.5239,
    "CNY": 7.8498,
    "HKD": 8.8934,
    "IDR": 16625.0,
    "ILS": 4.2691,
    "INR": 81.8215,
    "KRW": 1284.17,
    "MXN": 23.0209,
    "MYR": 4.7615,
    "NZD": 1.6526,
    "PHP": 60.009,
    "SGD": 1.5617,
    "THB": 37.317,
    "ZAR": 16.2903
  },
  "2018-12-10": {
    "USD": 1.1425,
    "JPY": 128.79,
    "BGN": 1.9558,
    "CZK": 25.866,
    "DKK": 7.4639,
    "GBP": 0.90245,
    "HUF": 323.15,
    "PLN": 4.2921,
    "RON": 4.6502,
    "SEK": 10.333,
    "CHF": 1.1295,
    "ISK": 140.0,
    "NOK": 9.6885,
    "HRK": 7.387,
    "RUB": 75.8985,
    "TRY": 6.0499,
    "AUD": 1.5842,
    "BRL": 4.4524,
    "CAD": 1.5218,
    "CNY": 7.8967,
    "HKD": 8.9283,
    "IDR": 16671.36,
    "ILS": 4.2642,
    "INR": 82.7284,
    "KRW": 1287.42,
    "MXN": 23.132,
    "MYR": 4.7671,
    "NZD": 1.6581,
    "PHP": 60.367,
    "SGD": 1.5667,
    "THB": 37.525,
    "ZAR": 16.3463
  },
  "2018-12-07": {
    "USD": 1.1371,
    "JPY": 128.36,
    "BGN": 1.9558,
    "CZK": 25.851,
    "DKK": 7.4641,
    "GBP": 0.89085,
    "HUF": 323.5,
    "PLN": 4.2895,
    "RON": 4.6485,
    "SEK": 10.2665,
    "CHF": 1.1299,
    "ISK": 139.5,
    "NOK": 9.697,
    "HRK": 7.3913,
    "RUB": 75.885,
    "TRY": 6.0619,
    "AUD": 1.5766,
    "BRL": 4.4358,
    "CAD": 1.523,
    "CNY": 7.8244,
    "HKD": 8.8866,
    "IDR": 16454.01,
    "ILS": 4.2545,
    "INR": 80.509,
    "KRW": 1278.67,
    "MXN": 23.1435,
    "MYR": 4.7372,
    "NZD": 1.6558,
    "PHP": 60.059,
    "SGD": 1.5583,
    "THB": 37.359,
    "ZAR": 16.0673
  }

【问题讨论】:

  • 你试过什么?
  • 我不了解使用一些红宝石或如何计算汇率。
  • 1) 解析 JSON 文件 2) 将日期参数转换为您在 JSON 中看到的相同字符串格式 3) 查找 from_currency 到 EUR 汇率 4) 查找 EUR 到 to_currency 汇率 5) 计算尝试解决问题并在您有更多问题时回来,并向我们展示您尝试过的内容和无效的内容。我们不在这里解决家庭作业:-)
  • 一些建议: 1)删除“但其他来源可能不是JSON,可能不是基于欧元。”,因为没有办法处理这种开放式声明; 2) 写,“以下是从 JSON 文件读取的哈希示例。”; 3) 通过将 } .... 更改为 }} 并为哈希分配一个变量(例如,ex_rates = {"2018-12-11": {...}})使哈希成为有效的 Ruby 对象,以便读者可以在答案和 cmets 中引用该变量而无需定义它; 4) 说明这是否是家庭作业问题。如果是这样,则规则要求您描述为解决该问题所做的努力。
  • 谢谢,我试过这个

标签: ruby rubygems ruby-on-rails-5


【解决方案1】:

尝试这样的事情(复制这 3 个文件)

exchange.rb

require 'json'

module Exchange
  @rates = JSON.parse(File.read('rates.json'))

  def self.rate(date, from_currency, to_currency)
    rates = @rates[date]                     # get rates of given day
    from_to_eur = 1.0 / rates[from_currency] # convert to EUR
    from_to_eur * rates[to_currency]         # convert to target currency
  end
end

test_script.rb

require_relative 'exchange.rb'
require 'date'

target_date = Date.new(2018,12,11).to_s
puts "USD to GBP: #{Exchange.rate(target_date, 'USD', 'GBP')}"
puts "USD to JPY: #{Exchange.rate(target_date, 'PLN', 'CHF')}"
puts "DKK to CAD: #{Exchange.rate(target_date, 'PLN', 'CHF')}"

rates.json

{
  "2018-12-11": {
    "USD": 1.1379,
    "JPY": 128.75,
    "BGN": 1.9558,
    "CZK": 25.845,
    "DKK": 7.4641,
    "GBP": 0.90228,
    "HUF": 323.4,
    "PLN": 4.2983,
    "RON": 4.6557,
    "SEK": 10.297,
    "CHF": 1.1248,
    "ISK": 140.2,
    "NOK": 9.7038,
    "HRK": 7.3943,
    "RUB": 75.5225,
    "TRY": 6.1295,
    "AUD": 1.5778,
    "BRL": 4.4417,
    "CAD": 1.5239,
    "CNY": 7.8498,
    "HKD": 8.8934,
    "IDR": 16625.0,
    "ILS": 4.2691,
    "INR": 81.8215,
    "KRW": 1284.17,
    "MXN": 23.0209,
    "MYR": 4.7615,
    "NZD": 1.6526,
    "PHP": 60.009,
    "SGD": 1.5617,
    "THB": 37.317,
    "ZAR": 16.2903
  },
  "2018-12-10": {
    "USD": 1.1425,
    "JPY": 128.79,
    "BGN": 1.9558,
    "CZK": 25.866,
    "DKK": 7.4639,
    "GBP": 0.90245,
    "HUF": 323.15,
    "PLN": 4.2921,
    "RON": 4.6502,
    "SEK": 10.333,
    "CHF": 1.1295,
    "ISK": 140.0,
    "NOK": 9.6885,
    "HRK": 7.387,
    "RUB": 75.8985,
    "TRY": 6.0499,
    "AUD": 1.5842,
    "BRL": 4.4524,
    "CAD": 1.5218,
    "CNY": 7.8967,
    "HKD": 8.9283,
    "IDR": 16671.36,
    "ILS": 4.2642,
    "INR": 82.7284,
    "KRW": 1287.42,
    "MXN": 23.132,
    "MYR": 4.7671,
    "NZD": 1.6581,
    "PHP": 60.367,
    "SGD": 1.5667,
    "THB": 37.525,
    "ZAR": 16.3463
  },
  "2018-12-07": {
    "USD": 1.1371,
    "JPY": 128.36,
    "BGN": 1.9558,
    "CZK": 25.851,
    "DKK": 7.4641,
    "GBP": 0.89085,
    "HUF": 323.5,
    "PLN": 4.2895,
    "RON": 4.6485,
    "SEK": 10.2665,
    "CHF": 1.1299,
    "ISK": 139.5,
    "NOK": 9.697,
    "HRK": 7.3913,
    "RUB": 75.885,
    "TRY": 6.0619,
    "AUD": 1.5766,
    "BRL": 4.4358,
    "CAD": 1.523,
    "CNY": 7.8244,
    "HKD": 8.8866,
    "IDR": 16454.01,
    "ILS": 4.2545,
    "INR": 80.509,
    "KRW": 1278.67,
    "MXN": 23.1435,
    "MYR": 4.7372,
    "NZD": 1.6558,
    "PHP": 60.059,
    "SGD": 1.5583,
    "THB": 37.359,
    "ZAR": 16.0673
  }
}

当您运行test_script.rb 时,您应该能够看到汇率。我希望这对您有用,但请注意,这仅涵盖 JSON 案例。让我知道它是否有效,我必须同意@pascal_betz,将来请提供更多信息,您已经尝试过什么,实际失败了什么,或者您具体没有做什么。但是欢迎来到stackoverflow,一定要继续发帖,我知道一开始可能会令人沮丧! ;)

【讨论】:

  • 这假设“买入”和“卖出”汇率是相同的,你当然必须假设这是真的,因为你只使用一组汇率,但这是一个真实世界问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 2014-12-21
相关资源
最近更新 更多