qhnw.net
当前位置:首页 >> DouBlE转int四舍五入吗 >>

DouBlE转int四舍五入吗

printf限定位数输出时是4舍5入.double->float,是不会4舍5入的,直接丢弃尾部的参数.

只取整数部分

电脑没那么聪明,只会直接丢失精度,b=2

可以,直接强转就行double d = 34.63;int i = (int) d;

用Math.Ceiling,这是向上进位取整函数.例如:Math.Ceiling(32.4) 结果是33; Math.Ceiling(32.0) 结果是 32与此对应的是向下舍位取整 Math.Floor.例如: Math.Floor(32.6) 结果是32

在android开发过程中我们常常遇到数据类型的转换,其中double转int类型是最常见的 方法一:强制转换 int i ; double db; i = (int) db; 这种方法会丢失小数点后面的值 int i ; double db; i = (int)Math.pow(db2, n); 这种方法的好处是不会丢失小数点

最简单是用printf("%.2lf"), sprintf()等函数. 或者你自己写也行,比如3.14要四舍五入到整数 那么3.14 + 0.5 然后强制转换成整形 doulbe num = 3.14; num = (int)(num+0.5); 其他小数点的,如同.

因为无论是double还是int都是二进制储存,在二进制小数转换成十进制很容易出现误差导致问题,改成下面代码就看得出:int main() { double a; int b; int c; a=1234.56; b=(int)a; a=a-b;//这里a=0.5599999999 c=(int)(a*100);//55.99999999转换成int时,小数直接去掉,所以是55 return 0; }

对double数据类型进行四舍五入运算,可以利用double转为整型时强制取整来做到.1 将double类型数据,强制转换为int类型,会强制截取整数部分.比如double a = 1.23; (int)a的值就是1.2 由于是强制取整,所以即使是1.9转为int后,同样是1,这与四舍五入的要求不符.所以可以转换一下算法,做(int)(a+0.5)就可以实现四舍五入到整数的效果了.3 要实现四舍五入到某一位,可以先乘一个值,将该位移动到个位,取整后,再除上这个值,将其移动回去.比如将double a = 1.2345四舍五入保留2位小数,可以写作(int)(a*100+0.5)/100.0.

使用强制类型转换,就是要转换的类型,加个括号.int ia; double da; ia=1234; da=(double)ia;//这样da就等于1234.00 da=12.34567; ia=(int)da;//这样ia就等于12,问题是这种转换会损失精度,小数部分被截取还可以接受,如果double超出了int的最大值,高出部分的位数也会被截掉,那就是灾难性的了,所以一般不做这种转换,除非你对待转换的数据大小心中有数.

bestwu.net | lhxq.net | bnds.net | xmlt.net | msww.net | 网站首页 | 网站地图
All rights reserved Powered by www.qhnw.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com