首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何舍入、求底、求底、截断

如何舍入、求底、求底、截断
EN

Stack Overflow用户
提问于 2019-11-27 13:24:44
回答 3查看 1.4K关注 0票数 3

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

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

四舍五入示例:

代码语言:javascript
复制
5.52 --> 6
5.50 --> 5 or 6
-5.52 --> -6

截断示例:

代码语言:javascript
复制
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,但它是不必要的复杂(并且可能包含错误)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-27 14:00:57

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

round/0

代码语言:javascript
复制
def round: . + 0.5 | floor;

ceil/0

代码语言:javascript
复制
def ceil: if . | floor == . then . else . + 1.0 | floor end;

trunc/0

代码语言:javascript
复制
def trunc: if . < 0 then ceil else floor end;
票数 4
EN

Stack Overflow用户

发布于 2019-11-27 13:40:56

在JQ1.6中,您可以访问round/ceil/floor函数

代码语言:javascript
复制
$ echo '{"mass": 188.72}' | jq ' .mass | round '
189
$ echo '{"mass": 188.72}' | jq ' .mass | ceil '
189
$ echo '{"mass": 188.72}' | jq ' .mass | floor '
188
$ 

对于JQ1.5,这里是hack

圆形:

代码语言:javascript
复制
$ echo '{"mass": 188.42}' | jq ' .mass + 0.5 | tostring | split(".") | .[0] '  -r
188

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

代码语言:javascript
复制
$ echo '{"mass": 188.42}' | jq ' .mass + 0.99999999 | tostring | split(".") | .[0] '  -r
189

楼层:

代码语言:javascript
复制
$ echo '{"mass": 188.42}' | jq ' .mass | tostring | split(".") | .[0] '  -r
188
票数 2
EN

Stack Overflow用户

发布于 2019-11-27 13:41:00

jq的数学内置在jq手册的math一节中列举。当前版本在https://stedolan.github.io/jq/manual/上;指向早期版本的链接在顶部。

请注意,JQ1.5和JQ1.6都有名为roundceilfloortrunc的内置组件:它们都是0度过滤器。

例如。

代码语言:javascript
复制
[5.52, 5.50, -5.52 ] | map(trunc)

#=> [5,5,-5]

jq的早期版本有不同的数学函数集,例如JQ1.4有floor,但没有其他三个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59063536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档