double四舍五入保留两位小数

问题描述:

double四舍五入保留两位小数
double d1 = Math.round(4.015*100)/100.0;
为什么打印为4.01?
1个回答 分类:数学 2014-11-03

问题解答:

我来补答
我猜测如下,因为4.015,小数部分的0.015表示成2进制数时是无限循环的,因此用double型表示4.015时,由于double的位数有限,所以只能用一个略小于4.015的数(肯定是略小于,因为只有位数无限时,这个2进制数才能等于0.015)去近似表示4.015,假设这个数是4.0149.,那么乘100后是401.49.,Math.round后是401.
再问: 我发现java api中没有个完整解决的方法 DecimalFormat df = new DecimalFormat("0.00"); String result = df.format(d); 当d为0.005结果为0.00
再答: 这里可能涉及到银行家四舍五入法,比如0.005四舍五入到小数点后2位时,如果第3位是5,会看第2位是偶数还是奇数,奇数则进位,偶数则不管。
再问: 这个确实是这个问题 谢谢诶啊 不过double d1 = Math.round(4.015*100)/100.0; 那四舍五入有没有什么好的解决办法呐?
再答: 好像没什么好的解决办法,我用C和C++试过了,也不行。
再问: 这种问题常出现啊只要是保留位数下一位是5就会出问题  四舍六入五成双是一种精确度的计数保留法.这里"四"是小于五的意思,"六"是大于五的意思,"五"是舍入位之后的尾数逢五的话看前一位,奇进偶不进。如1.25保留一位小数,因为2是偶数,所以是1.2。又如1.35,因为3是奇数,所以是1.4。
 
 
展开全文阅读
剩余:2000
上一页:一道物理提题