价格对象交易中的纳米十进制表示法 api 以 0 开头的数字出现错误

Nano decimal notation within price object transactions api error through numbers beginning with 0

在交易 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”),我们如何才能获得正确形式的单位和纳米?

您不需要正好显示 9 位数字。你只需要一个数字,当除以 10^9(或者当你将小数点向左移动 9 位,如果你愿意),代表你需要的单位的小数部分。

所以你的例子可以写成

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

你没有指定你使用的是什么语言,但是如果你在 JavaScript 中这样做,你可以使用类似这样的东西来传递两个字符串(价格和货币代码)和取回价格对象:

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
    };
}