世界上的许多国家已广泛采用“四舍六入法”。我国国家科委于1955年就作了推荐。“四舍 六入法”可以概括为:“四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍 去,五前为奇要进一。简单地说叫“四舍、六入、五凑偶”.
在工程技术、金融和科学领域,我们往往认为将一个小数圆整到距离它最近的偶数(而并非总是将它向上圆整)更加精确,即我们在此所说的“四舍六入”法。 Math.Round()方法使用的银行家算法的依据,是IEEE Standard 754这个国际标准.
如果你还不清楚四舍六入五成双是如何发生的,请看下面的例子:
double a = -12.65;
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(1);
System.out.println(nf.format(a));
打印结果是: -12.6
如果我把a的值设为-12.651,打印结果是-12.7.
如果我把a的值设为-12.55,打印结果是-12.6.
由此可以验证文章开头的四射六入法则,虽然我们所熟悉的四舍五入在Java中已经变成了四舍六入了.但是也不必紧张,我们还是有办法实现四舍五入的.
方法一:如果一个数是正数,将这个数加上一个很小的数,比如:0.0000000001.然后在保留几位小数就好了.反之就减一个很小的数.
方法二:可以使用BigDecimal的setScale()方法。
方法三:如果你用的是Math.round()方法,其正数是遵守四舍五入法则的,但是负数进位的话就向大数靠了,可以先将负数转换为正数,然后在乘以-1。
本Blog文章除特别声明之外皆为原创文章,欢迎转载,转载请注明: 转载自JSSAY'S BLOG