如何进行圆角,地板,天花板,截头

问题描述 投票:1回答:3

我如何在jq jq-1.5-1-a5b5cbe中对数字进行舍入,倒数,截尾和截断?

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

周围的例子:

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进行截断,但是它不必要地复杂(并且可能包含错误)。

json math jq truncate
3个回答
1
投票

某些构建可能缺少这些功能,但就我而言,自jq 1.3(或什至更早)以来,所有版本都具有floor;因此,您可以使用它来实现它们。

回合/ 0

def round: . + 0.5 | floor;

ceil / 0

def ceil: . + 1.0 | floor;

trunc / 0

def trunc: if . < 0 then ceil else floor end;

0
投票

jq的数学内置函数在jq手册的“数学”部分中进行了枚举。当前版本在https://stedolan.github.io/jq/manual/;较早版本的链接在顶部。

请注意,jq 1.5和1.6都具有名为roundceilfloortrunc的内建函数:它们都是0-arity过滤器。

例如

[5.52, 5.50, -5.52 ] | map(trunc)

#=> [5,5,-5]

jq的早期版本具有不同的Math函数集,例如jq 1.4具有floor,但没有其他三个。


0
投票

在jq 1.6中,您可以使用圆形/天花板/地板功能

$ 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

天花板(可能必须添加更多9999s以提高精度):

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

楼层:

$ echo '{"mass": 188.42}' | jq ' .mass | tostring | split(".") | .[0] '  -r
188
© www.soinside.com 2019 - 2024. All rights reserved.