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()
是要调用的正确函数。我猜a
是int
,这将使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用法详解(保留小数,四舍五入,数字格式化,科学计数法转数字等)
BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)
BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)