作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 JSON 对象中,给定字符串 "0.0000086900"
作为键值对的值,如果我这样做 |tonumber
对此,8.69e-06
被退回。
如何确保只返回小数?
在上述情况下,这将是 0.0000086900
解决方案(基于下面的 Peak 代码片段)
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;
最佳答案
不幸的是,目前 jq 无法修改 JSON 数字的表示形式;最好的办法是将它们的表示修改为字符串。这是可以做什么的简单说明。to_decimal
将 JSON 数字(或数字的有效 JSON 字符串表示形式,可能带有前导“+”)作为输入,并将其转换为合适的字符串,例如:
["0","1","-1","123","-123",".00000123","1230000","-.00000123","-0.123","0.123","0.001"]
产生:
[0,"0"]
["+1","1"]
[-1,"-1"]
[123,"123"]
[-123,"-123"]
[1.23e-06,".00000123"]
[1230000,"1230000"]
[-1.23e-06,"-.00000123"]
[-0.123,"-0.123"]
[0.123,"0.123"]
[0.001,"0.001"]
请注意,任何前导的“+”都被删除了。
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
| capture( "(?<sgn>[+-]?)(?<left>[0-9]*)(?<p>\\.?)(?<right>[0-9]*)(?<e>[Ee]?)(?<exp>[+-]?[0-9]+)" )
| if .e == "" then (if .sgn == "+" then $s[1:] else $s end)
else (.left|length) as $len
| (.exp|tonumber) as $exp
| (if .sgn == "-" then "-" else "" end ) as $sgn
| if $exp < 0 then "." + (.left | lpad(1 - $exp - $len)) + .right
else (.left | rpad($exp - $len)) + "." + .right
end
| $sgn + .
end ;
关于json - jq中如何让tonumber输出十进制而不是科学记数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49502120/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!