Java 对任意数字进行四舍五入

Posted

技术标签:

【中文标题】Java 对任意数字进行四舍五入【英文标题】:Java Round up Any Number 【发布时间】:2011-05-31 06:04:56 【问题描述】:

对于一个简单的问题,我似乎找不到我正在寻找的答案:如何将任何数字四舍五入到最接近的 int

例如,只要数字为 0.2、0.7、0.2222、0.4324、0.99999,我希望结果为 1。

目前为止

int b = (int) Math.ceil(a / 100);

不过,它似乎没有做这项工作。

【问题讨论】:

你的示例代码中为什么要除以 100? 我打赌你的a 是整数类型。 是的,你的权利 a 是一个 int...感谢您指出这一点。 100.0 为我排序。 我猜他想要的是四舍五入的/100,但是是的,这个问题需要澄清一下。 注意:this 问题提供了更好的答案。 【参考方案1】:

Math.ceil() 是要调用的正确函数。我猜aint,这将使a / 100 执行整数运算。请改用Math.ceil(a / 100.0)

int a = 142;
System.out.println(a / 100);
System.out.println(Math.ceil(a / 100));
System.out.println(a / 100.0);
System.out.println(Math.ceil(a / 100.0));
System.out.println((int) Math.ceil(a / 100.0));

输出:

1
1.0
1.42
2.0
2

见http://ideone.com/yhT0l

【讨论】:

只有当 "a" 是双倍时才这样做 ^^ "a" 必须是双精度或强制转换。 a 在此示例中是 int,它按建议工作。执行int / float 时,结果为float,如输出所示。试试这个链接。【参考方案2】:

我不知道你为什么要除以 100,但这是我的假设 int a;

int b = (int) Math.ceil( ((double)a) / 100);

int b = (int) Math.ceil( a / 100.0);

【讨论】:

【参考方案3】:
int RoundedUp = (int) Math.ceil(RandomReal);

这似乎做得很完美。每次都工作。

【讨论】:

【参考方案4】:

假设 a 为双精度数,我们需要一个不带小数位的四舍五入数字。使用 Math.round() 函数。 这是我的解决方案。

double a = 0.99999;
int rounded_a = (int)Math.round(a);
System.out.println("a:"+rounded_a );

Output : 
a:1

【讨论】:

这是一个错误的答案,因为这里要求如果 a=0.2 向上取整,结果将为 0【参考方案5】:

最简单的方法就是: 您将收到一个浮点数或双精度数,并希望将其转换为最接近的整数,然后只需执行 System.out.println((int)Math.ceil(yourfloat)); 它会完美地工作

【讨论】:

【参考方案6】:

10 年后,这个问题仍然困扰着我。

所以这就是那些像我一样迟到的人的答案。

这不起作用

int b = (int) Math.ceil(a / 100);

因为结果 a / 100 原来是一个整数并且它被四舍五入所以 Math.ceil 对此无能为力。

你必须避免用这个进行四舍五入操作

int b = (int) Math.ceil((float) a / 100);

现在可以了。

【讨论】:

【参考方案7】:

只是另一种选择。使用数学基础知识:

Math.ceil(p / K)((p-1) // K) + 1 相同

【讨论】:

以上是关于Java 对任意数字进行四舍五入的主要内容,如果未能解决你的问题,请参考以下文章

java BigDecimal用法详解(保留小数,四舍五入,数字格式化,科学计数法转数字等)

C#将数字四舍五入为双精度数的任意数字[重复]

BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)

BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)

BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)

java--利用DecimalFormat.java类将给定的数字进行格式化