价格对象交易中的纳米十进制表示法 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
};
}
在交易 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
};
}