Java强制转换为啥没有四舍五入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java强制转换为啥没有四舍五入相关的知识,希望对你有一定的参考价值。

Double a = 3.98;
int ab = (int)a;
System.out.println(ab);
结果是3 不是4 为什么没有四舍五入

因为java语言的强制转换不是数学上的4舍5入,而是拦腰截断而已,int类型是用来装整型数据的,它不管小数点后面的数据,对它来说就是无视小数点后面的数据,它只干好自己负责的整数部分,大概就这样。 参考技术A 强转 就是去掉 你小数点后面的 数字!
你要想让他 换行 就干脆 先让它四舍五入!
然后再让他强转
要两个步骤~
参考技术B 你这是强转啊,当然不会四舍五入。
public static int round(float a)返回最接近参数的 int。通过加上 1/2 将该结果舍入为整数,取结果的基数并将其强制转换为 int 类型。换句话说,结果等于以下表达式的值:

(int)Math.floor(a + 0.5f)特殊情况是:

如果参数是 NaN,那么结果是 0。
如果结果是负无穷大或任何小于或等于 Integer.MIN_VALUE 的值,那么结果等于 Integer.MIN_VALUE 的值。
如果参数是正无穷大或任何大于或等于 Integer.MAX_VALUE 的值,那么结果等于 Integer.MAX_VALUE 的值。
参考技术C 强制转换是一个非常基本的操作,可能四舍五入太过复杂了吧。
如果你想要做到这一点,可以使用Math.round()或者BigDecimal,如下:
public int getRound(double dSource)...

int iRound

//BigDecimal的构造函数参数类型是double

BigDecimal deSource = new BigDecimal(dSource);

//deSource.setScale(0,BigDecimal.ROUND_HALF_UP) 返回值类型 BigDecimal

//intValue() 方法将BigDecimal转化为int

iRound= deSource.setScale(0,BigDecimal.ROUND_HALF_UP).intValue();

return iRound;

参考技术D 你不妨举个例子说明下,这样谁都明白你问的是什么问题

以上是关于Java强制转换为啥没有四舍五入的主要内容,如果未能解决你的问题,请参考以下文章

java中将一个double类型的数强制转换为long 型是四舍五入吗?

java中,强制转换符把float转换为int时,按四舍五入,还是直接丢掉小数部分?

double 转换int 要四舍五入的 c语言

javascript 怎么将float强制转换为int类型

为啥强制转换和转换操作在语法上无法区分?

如果从数组中复制最终变量,为啥 Java 需要对最终变量进行显式强制转换?