Получить точное значение из Google Sheets, который использует формулу из Google Finance - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь отобразить на веб-странице фактические цены в разных валютах, используя ASP .NET и C #. Проблема заключается в том, что если я открою свой браузер с таблицей, с которой мой алгоритм использует для считывания значений, и с веб-страницы, которая должна его отображать, иногда значения не будут совпадать.

Например, предположим, что у нас есть значение ¥ 0,03810 в Google Sheet. Когда я открываю веб-страницу, она может показывать точное значение, 0,03810 иен, или фактически отображать действительно разные значения, например 0,03815 и даже 0,03803 иен.

Я уже много чего перепробовал. Во-первых, я подумал, что это происходит из-за того, что алгоритм округляет числа так, как ему нравится, поскольку нет никаких критериев относительно того, как он должен печатать число. Оказывается, это было не так, поскольку я уже пробовал:

  • Преобразование строки, считанной с листа, в десятичную / двойную, а затем преобразование ее снова в строку.
  • Фактически сохраняя значение как десятичное / двойное, а затем выполняя некоторые простые математические манипуляции с ним, такие как умножение на 100, а затем деление на 100. Все еще нет прогресса.
  • Преобразование значения в строку перед присвоением переменной.

В любом случае, чтобы прочитать каждую строку из моего Google Sheet, я использую WebClient, который загружает ее .tsv версию, затем я разделяю строку и превращаю ее в список.

List<Coin> coins = new List<Coin>();

string priceList = wc.DownloadString(xls);
var lines = priceList.Split('\n').ToList();

Теперь, когда у меня есть все мои строки в виде списка, я использую for loop, чтобы перебрать их и получить валютную цену каждой из них.

  for (int x = 1; x < lines.Count(); x++) {
    var item = lines[x].Replace("\r", "").Split('\t');

    coins.Add(new Coin() {
      price = item[4],
      //assigning other attributes...
    }
  }

item[4] содержит цену валюты в Google Sheet.

Формула Google Finance, которую я использую:

=GoogleFinance("CURRENCY:USDBRL";"average")

Когда я наконец напечатаю price на веб-странице, большую часть времени (кажется, что она становится еще более нестабильной, чем больше десятичных разрядов), она будет показывать другие значения, чем те, которые на самом деле показывает мой лист.

Теперь я не совсем уверен, действительно ли алгоритм округляет некоторые числа, когда он выбирает значения в Google Sheet, или формула Google Finance фактически меняет свое значение каждые несколько секунд, и значение, отображаемое на веб-странице, равно правильный, потому что он всегда загружает последнюю версию листа и запускает формулу Google Finance вместе.

...