Java中向上取整数字

4

我不知道如何将数字四舍五入到特定的小数位数

我已经查遍了所有资料,尝试了各种方法

目前我的程序可以将数字四舍五入到整数:

double rACT = Math.ceil(ACT); double rSAT = Math.ceil(SAT); double rGPA = Math.ceil(GPA);

但是我需要将其四舍五入到两个小数位

顺便说一下 - 我是一名高中学生,我真的不需要过于复杂的方法来做到这一点,因为我需要让我的方法少于15行,我不能浪费任何行数


1
https://dev59.com/-nVC5IYBdhLWcg3w4Vb6 - Vishal
在编程中,四舍五入一个数字(保留N位小数)和应用四舍五入/截断规则获取字符串表示形式之间是有区别的。 - user166390
4个回答

11

可能有更简单的方法,但显而易见的是:

double rSAT = Math.ceil(SAT * 100) / 100;

这将把类似2.123的数字转换为212.3,将其四舍五入为213,然后再除以100得到2.13。


实际上,调用 Math.ceil() 将会把数字 212.3 四舍五入为 213。在数学中,向上取整函数将会把任何大于整数的数字四舍五入到下一个可用的整数,所以即使是 212.0003 也会被四舍五入到 213。你可以使用 Math.round() 函数来执行标准的四舍五入操作,它等同于 Math.floor(decimal + 0.5) - Brandon Buck
@izuriel - 这个问题指定了将数字 向上 四舍五入(并且他们也使用 Math.ceil)。不过我修改了我的解释,让它说把 212.3 四舍五入到 213。 - Brendan Long
我的理解是他在询问如何对数字进行四舍五入,并提供了他能想到的解决方案。无论如何,你明确表示调用Math.ceil()函数对212.3进行取整会得到212,这是不正确的,这也是我评论中主要关注的错误之处。 - Brandon Buck

2

通常情况下,在渲染数字时(例如作为字符串),最好在该点进行舍入。这样,数字可以以最高精度存储/传递,并且仅在向用户显示时截断信息。

此代码最多舍入到两位小数,并使用上取整。

double unrounded = 3.21235;
NumberFormat fmt = NumberFormat.getNumberInstance();
fmt.setMaximumFractionDigits(2);
fmt.setRoundingMode(RoundingMode.CEILING);

String value = fmt.format(unrounded);
System.out.println(value);

0

这个问题以前已经被问过了,请查看如何在Java中将数字四舍五入到n位小数

我认为,最简单的解决方案是chris提供的这个:

double myNum = .912385;
int precision = 10000; //keep 4 digits
myNum= Math.floor(myNum * precision +.5)/precision;

2
为什么要使用 Math.floor(x + 0.5) 而不是只用 Math.ceil(x) - Brendan Long
添加0.5,因为: 例如,如果数字是1.4 -> 1.4 + 0.5 = 1.9,floor(1.9) = 1 如果数字是1.6 -> 1.6 + 0.5 = 2.1,floor(2.1) = 2 因此,采用这种方式进行四舍五入。 - Zohaib
最好使用专门设计的函数(Math.ceil)来进行四舍五入。 - Brendan Long

0
如果您正在寻找一个数字的字符串表示,可以像下面这样做:
DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(12.912385));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接