如何舍入、取整、取整、截断

jmp*_*isb 4 math json truncate jq

如何对 jq jq-1.5-1-a5b5cbe 中的数字进行舍入、取整、取整和截断?

例如,与{"mass": 188.72},我想要{"mass": 188}与地板,{"mass": 189}与天花板和圆形。

舍入示例:

5.52 --> 6
5.50 --> 5 or 6
-5.52 --> -6
Run Code Online (Sandbox Code Playgroud)

截断示例:

5.52 --> 5
5.50 --> 5
-5.52 --> -5
Run Code Online (Sandbox Code Playgroud)

我已经提出了-5 as $n | if $n > 0 then [range($n+0.00000000000001)] else [range(-$n)] end | last截断,但它不必要地复杂(并且可能包含错误)。

ogu*_*ail 9

有些版本可能缺少这些功能,但就我而言,它们floor是广泛可用的;因此,您可以使用它来实现它们。

回合/0

def round: . + 0.5 | floor;
Run Code Online (Sandbox Code Playgroud)

天花板/0

def ceil: if . | floor == . then . else . + 1.0 | floor end;
Run Code Online (Sandbox Code Playgroud)

截断/0

def trunc: if . < 0 then ceil else floor end;
Run Code Online (Sandbox Code Playgroud)


Ke *_*Zhu 5

在 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
$ 
Run Code Online (Sandbox Code Playgroud)

对于 jq 1.5,这里是 hack

圆形的:

$ echo '{"mass": 188.42}' | jq ' .mass + 0.5 | tostring | split(".") | .[0] '  -r
188
Run Code Online (Sandbox Code Playgroud)

上限(可能需要添加更多 9999 以提高精度):

$ echo '{"mass": 188.42}' | jq ' .mass + 0.99999999 | tostring | split(".") | .[0] '  -r
189
Run Code Online (Sandbox Code Playgroud)

地面:

$ echo '{"mass": 188.42}' | jq ' .mass | tostring | split(".") | .[0] '  -r
188
Run Code Online (Sandbox Code Playgroud)