java舍入问题 java如何实现 四舍六入五成双 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最好的办法,比如 4.6 四舍五入取整, 4.6 + 0.5,结果再强制转成int型,取整数部分.结果就是5.如果是4.4 的话,4.4+0.5=4.9 取整为4如果是多位小数的话,先乘一个数,如10 100 1000 ,具体看小数位置,再执行上面的算法,结果再除以刚才乘的数. 好像不是这个 比这个复杂的delphi上就有一个函数支持 不知道java有没有 还有楼上是做广告的么 什么意思 点进去都是网站广告四舍六入五成双 的意思可以百度的谢谢各位了 呵呵 import java.math.BigDecimal;public class NumberUtil { public static double getRound(int index, double number) { if (number == 0) return 0; if (index < 0) throw new IllegalArgumentException("error param"); String temp = String.valueOf(number); BigDecimal b = new BigDecimal(temp); BigDecimal one = new BigDecimal(1); return b.divide(one, index, BigDecimal.ROUND_HALF_EVEN).doubleValue(); } public static void main(String[] args) { System.out.println(getRound(1, 1.25)); }} public static int round(double d) { double r = (Math.floor(d * 10) / 10.0) % 1.0; if (r == 0.5) { int i = (int) d; return (i + 1) / 2 * 2; } return (int) (d + 0.5);}这样么? index为保留小数点后几位,取整写0 b.a : a>5 直接进位 ;a<5 直接舍去; a=5 且b%2=0 直接舍去 ;a=5且b%!=0 进位是不是这个意思啊?? 学习了!ROUND_HALF_EVENpublic static final int ROUND_HALF_EVEN 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。 错误:BigDecimal b=new BigDecimal(12.12345);System.out.println(b.setScale(4,BigDecimal.ROUND_HALF_DOWN));打印结果为12.1235分析:经过调试发现System.err.println(new BigDecimal(12.12345));结果为12.1234500000000000596855898038484156131744384765625,原来double类型数据只能在计算机中近似使用2进制表示,而0.0000500000000000596855898038484156131744384765625显然是>0.5的只能进一位修改:BigDecimal b=new BigDecimal("12.12345");System.out.println(b.setScale(4,BigDecimal.ROUND_HALF_DOWN));打印结果为12.1234 Java如何使用物理引擎? 跪求:java中标识数据的生存时间(顶既有分) 传参的本使用中的问题 这 个问题如何解决呀? 真诚求教!-高手看看这个java恢复SQL数据库的一个小小问题(解决给100) 谁能提供几个经典的SQL面试题? 求救,想快点回家过年啊,一个有关Process的问题 简单问题,送分 just tell me why???呵呵 java.util.Date中syntax:{}是什么意思? java动态编译时 报java.lang.ClassNotFoundException BigDecimal精度问题
如果是4.4 的话,4.4+0.5=4.9 取整为4如果是多位小数的话,先乘一个数,如10 100 1000 ,具体看小数位置,再执行上面的算法,结果再除以刚才乘的数.
还有楼上是做广告的么 什么意思 点进去都是网站广告四舍六入五成双 的意思可以百度的谢谢各位了 呵呵
import java.math.BigDecimal;public class NumberUtil {
public static double getRound(int index, double number) {
if (number == 0)
return 0;
if (index < 0)
throw new IllegalArgumentException("error param");
String temp = String.valueOf(number);
BigDecimal b = new BigDecimal(temp);
BigDecimal one = new BigDecimal(1); return b.divide(one, index, BigDecimal.ROUND_HALF_EVEN).doubleValue();
} public static void main(String[] args) {
System.out.println(getRound(1, 1.25));
}
}
double r = (Math.floor(d * 10) / 10.0) % 1.0;
if (r == 0.5) {
int i = (int) d;
return (i + 1) / 2 * 2;
}
return (int) (d + 0.5);
}
这样么?
是不是这个意思啊??
ROUND_HALF_EVEN
public static final int ROUND_HALF_EVEN
向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。
错误:BigDecimal b=new BigDecimal(12.12345);
System.out.println(b.setScale(4,BigDecimal.ROUND_HALF_DOWN));打印结果为12.1235分析:经过调试发现System.err.println(new BigDecimal(12.12345));结果为12.1234500000000000596855898038484156131744384765625,原来double类型数据只能在计算机中近似使用2进制表示,而0.0000500000000000596855898038484156131744384765625显然是>0.5的只能进一位修改:BigDecimal b=new BigDecimal("12.12345");
System.out.println(b.setScale(4,BigDecimal.ROUND_HALF_DOWN));打印结果为12.1234