如何舍入,地板,天花板,截断
How to round, floor, ceil, truncate
如何在 jq jq-1.5-1-a5b5cbe 中舍入、取整、取整和截断数字?
例如,对于 {"mass": 188.72}
,我希望 {"mass": 188}
带有 floor,{"mass": 189}
带有 ceil 和 round。
舍入示例:
5.52 --> 6
5.50 --> 5 or 6
-5.52 --> -6
截断示例:
5.52 --> 5
5.50 --> 5
-5.52 --> -5
我想出了 -5 as $n | if $n > 0 then [range($n+0.00000000000001)] else [range(-$n)] end | last
用于截断,但它不必要地复杂(并且可能包含错误)。
在 jq 1.6 中,您可以使用 round/ceil/floor 函数
$ echo '{"mass": 188.72}' | jq ' .mass | round '
189
$ echo '{"mass": 188.72}' | jq ' .mass | ceil '
189
$ echo '{"mass": 188.72}' | jq ' .mass | floor '
188
$
对于 jq 1.5,这里是 hack
回合:
$ echo '{"mass": 188.42}' | jq ' .mass + 0.5 | tostring | split(".") | .[0] ' -r
188
上限(可能需要添加更多 9999 以提高精度):
$ echo '{"mass": 188.42}' | jq ' .mass + 0.99999999 | tostring | split(".") | .[0] ' -r
189
楼层:
$ echo '{"mass": 188.42}' | jq ' .mass | tostring | split(".") | .[0] ' -r
188
jq 的数学内置函数在 jq 手册的数学部分中列举。当前版本在 https://stedolan.github.io/jq/manual/;
早期版本的链接位于顶部。
请注意,jq 1.5 和 1.6 都有名为 round
、ceil
、floor
和 trunc
的内置函数:它们都是 0-arity 过滤器。
例如
[5.52, 5.50, -5.52 ] | map(trunc)
#=> [5,5,-5]
早期版本的 jq 具有不同的数学函数集,例如jq 1.4 有 floor
但没有其他三个。
有些版本可能缺少这些功能,但就我而言 floor
是广泛可用的;因此,您可以使用它来实现它们。
round/0
def round: . + 0.5 | floor;
ceil/0
def ceil: if . | floor == . then . else . + 1.0 | floor end;
trunc/0
def trunc: if . < 0 then ceil else floor end;
如何在 jq jq-1.5-1-a5b5cbe 中舍入、取整、取整和截断数字?
例如,对于 {"mass": 188.72}
,我希望 {"mass": 188}
带有 floor,{"mass": 189}
带有 ceil 和 round。
舍入示例:
5.52 --> 6
5.50 --> 5 or 6
-5.52 --> -6
截断示例:
5.52 --> 5
5.50 --> 5
-5.52 --> -5
我想出了 -5 as $n | if $n > 0 then [range($n+0.00000000000001)] else [range(-$n)] end | last
用于截断,但它不必要地复杂(并且可能包含错误)。
在 jq 1.6 中,您可以使用 round/ceil/floor 函数
$ echo '{"mass": 188.72}' | jq ' .mass | round '
189
$ echo '{"mass": 188.72}' | jq ' .mass | ceil '
189
$ echo '{"mass": 188.72}' | jq ' .mass | floor '
188
$
对于 jq 1.5,这里是 hack
回合:
$ echo '{"mass": 188.42}' | jq ' .mass + 0.5 | tostring | split(".") | .[0] ' -r
188
上限(可能需要添加更多 9999 以提高精度):
$ echo '{"mass": 188.42}' | jq ' .mass + 0.99999999 | tostring | split(".") | .[0] ' -r
189
楼层:
$ echo '{"mass": 188.42}' | jq ' .mass | tostring | split(".") | .[0] ' -r
188
jq 的数学内置函数在 jq 手册的数学部分中列举。当前版本在 https://stedolan.github.io/jq/manual/; 早期版本的链接位于顶部。
请注意,jq 1.5 和 1.6 都有名为 round
、ceil
、floor
和 trunc
的内置函数:它们都是 0-arity 过滤器。
例如
[5.52, 5.50, -5.52 ] | map(trunc)
#=> [5,5,-5]
早期版本的 jq 具有不同的数学函数集,例如jq 1.4 有 floor
但没有其他三个。
有些版本可能缺少这些功能,但就我而言 floor
是广泛可用的;因此,您可以使用它来实现它们。
round/0
def round: . + 0.5 | floor;
ceil/0
def ceil: if . | floor == . then . else . + 1.0 | floor end;
trunc/0
def trunc: if . < 0 then ceil else floor end;