Нано-десятичная запись в api-ошибке транзакций объекта цены через числа, начинающиеся с 0 - PullRequest
0 голосов
/ 03 января 2019

В документации API транзакций:

https://developers.google.com/actions/reference/rest/Shared.Types/Price

указано, что цена продукта должна быть представлена ​​в следующем формате:

{ "currencyCode": string, "units": string, "nanos": number }

Где наноса представляют собой десятичные дроби в цене.Таким образом, 18,98 евро будет:

{ "currencyCode": EUR, "units": 18, "nanos": 980000000 }

Но здесь есть проблема.Как я могу представить, например, 18,07 евро.Я бы сказал:

{ "currencyCode": EUR, "units": 18, "nanos": 070000000 }

Но дело в том, что числа, начинающиеся с 0, не являются громкими ... Итак, мы немного застряли здесь, как мы можем справиться с этим.

Учитывая исходную цену в виде строки (например, «18.07»), как мы можем получить единицы и наночастицы в правильной форме?

1 Ответ

0 голосов
/ 03 января 2019

Вам не нужно показывать ровно 9 цифр.Вам просто нужно число, которое при делении на 10 ^ 9 (или когда вы перемещаете десятичную точку на 9 позиций влево, если хотите) представляет десятичную часть необходимых вам единиц.

Таким образом, ваш пример может быть записан как

{
  "currencyCode": "EUR",
  "units": "18",
  "nanos": 70000000
}

. Вы не указываете, какой язык вы используете, но если вы делаете это в JavaScript, вы можете использовать что-то вроде этого, чтобы передать две строки (цена и код валюты) и вернуть объект Price:

function price( p, cc ){
    // Split the string on a decimal point, if present
    let pa = p.split(".");
    let units = pa[0];

    // If we had something after the decimal point, add enough 0s to
    // make sure it represents nanos, then turn it into a number
    // by parsing it as a base-10 integer.
    let nanos = 0;
    if( pa.length > 1 ){
        let ns = pa[1]+"000000000";
    ns = ns.substring(0,9);
    nanos = parseInt( ns, 10 );
    }
    return {
        currencyCode: cc,
        units: units,
        nanos: nanos
    };
}
...