【发布时间】:2018-09-05 05:27:00
【问题描述】:
在 JSON 对象中,给定字符串 "0.0000086900" 作为键值对的值,如果我对此执行 |tonumber,则返回 8.69e-06。
如何确保只返回小数?
在上述情况下,这将是 0.0000086900
解决方案(基于以下 Peak 的代码 sn-p)
def to_decimal:
def rpad(n): if (n > length) then . + ((n - length) * "0") else . end;
def lpad(n): if (n > length) then ((n - length) * "0") + . else . end;
tostring
| . as $s
| [match( "(?<sgn>[+-]?)(?<left>[0-9]*)(?<p>\\.?)(?<right>[0-9]*)(?<e>[Ee]?)(?<exp>[+-]?[0-9]+)" )
.captures[].string] as [$sgn, $left, $p, $right, $e, $exp]
| if $e == "" then .
else ($exp|tonumber) as $exp
| ($left|length) as $len
| if $exp < 0 then "0." + ($left | lpad(1 - $exp - $len)) + $right
else ($left | rpad($exp - $len)) + "." + $right
end
| $sgn + .
end;
【问题讨论】:
标签: json string decimal jq scientific-notation