首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么math.ceiling不四舍五入我的数字?java

为什么math.ceiling不四舍五入我的数字?java
EN

Stack Overflow用户
提问于 2019-03-22 22:30:44
回答 3查看 432关注 0票数 1

尝试编写此脚本,以处理通常高达数千亿的输入。但是,Math.ceil不会向上舍入吗?

代码语言:javascript
复制
int clayturns  = (int)Math.ceil(clayneeded / 7500000000L);
System.out.println((int) Math.ceil(clayneeded / 7500000000L));
System.out.println("we need " + clayturns + "turns");
System.out.println("we need " + clayneeded + " clay added to our specific village.");

下面是eclipse控制台的输出。正如你所看到的,clayneeded不是空白的。如果真是这样,那么粘土圈应该一直是某个东西,它不可能是零,但它确实是。

代码语言:javascript
复制
we need 0turns
we need 3021588634 clay needed to our specific village.

请让我知道你的想法。数学天花板不能和Long一起工作吗?

EN

回答 3

Stack Overflow用户

发布于 2019-03-22 22:35:30

clayneededint/long吗?如果你在做int/long除法,它会在小数部分到达Math.ceil之前截断它。考虑到输入的大小,我建议不要使用floats/doubles,而是使用BigDecimals来精确计算。

票数 3
EN

Stack Overflow用户

发布于 2019-03-22 22:36:24

看起来clayneeded有整数类型(可能是long)。所以clayneeded/7500000000L是整数除法商(),因此ceil计算整数的上限,因此它本身。

代码语言:javascript
复制
long remainder = clayneeded % 7500000000L;
long result = (clayneeded/7500000000L)+(remainder!=0?1:0);
票数 0
EN

Stack Overflow用户

发布于 2019-03-22 22:37:38

整数的最大值为+2,147,483,647。

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

https://stackoverflow.com/questions/55301864

复制
相关文章

相似问题

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