我用以下代码取四舍五入值:
/**
* 四舍五入.
* @param x double 源值.
* @param y int 小数位数.
* @return double 四舍五入后的值.
* @author xujun
* create 2004-11-19 16:07
*/
public static double round (double x, int y) {
if (x >= 0.0D) {
x += 9.9999999999999995E-008D ;
}
else {
x -= 9.9999999999999995E-008D ;
}
String formatstr = "################" ;
if (y != 0) {
formatstr += "." ;
for (int i = 0 ; i < y ; i++) {
formatstr += "#" ;
}
}
String str = (new DecimalFormat (formatstr)).format (x) ;
return Double.parseDouble (str) ;
}
但是输入round(18.0/28.0,7)的时候返回的值是0.6428572而不是0.6428571。由于我的程序对数据的精度要求比较高,所以请大家给看看,解决办法有效的送分50!!!
/**
* 四舍五入.
* @param x double 源值.
* @param y int 小数位数.
* @return double 四舍五入后的值.
* @author xujun
* create 2004-11-19 16:07
*/
public static double round (double x, int y) {
if (x >= 0.0D) {
x += 9.9999999999999995E-008D ;
}
else {
x -= 9.9999999999999995E-008D ;
}
String formatstr = "################" ;
if (y != 0) {
formatstr += "." ;
for (int i = 0 ; i < y ; i++) {
formatstr += "#" ;
}
}
String str = (new DecimalFormat (formatstr)).format (x) ;
return Double.parseDouble (str) ;
}
但是输入round(18.0/28.0,7)的时候返回的值是0.6428572而不是0.6428571。由于我的程序对数据的精度要求比较高,所以请大家给看看,解决办法有效的送分50!!!
解决方案 »
- 如何取出日期所在周的第一天(周一)和最后一天(周日)的日期
- 《Struts in action》 非常全面的Struts教程下载
- 求Java游戏引擎
- TextArea文本组件如何填充Frame组件呢
- 请问有人知道Google里面的calendar是通过什么机制来实现的??有兴趣的请进来...
- 一个求时间的问题(大家可以来看看!)
- Manifest 到底有什么作用呢?必须吗?
- 新手问题。怎样往JTable中插入数据。
- 也是jdbc连接SQL Server2000问题.别人都是这样连阿,为什么我的却失败。help!
- java中怎么实现链表或者树一类的东西?
- 编译原程序的问题!
- 初学Java, 怎么强制转换类型?
if (x >= 0.0D) {
x += 9.9999999999999995E-008D ;
}
else {
x -= 9.9999999999999995E-008D ;
}
怎么跟y无关啊?
int divided = 1;
for(int i = 0; i < y; i++){
x = x * 10;
divided = divided * 10;
}
int dd = (int) x;
if((int) (x * 10 - dd * 10) < 5){
x = (double)dd / divided;
}
else{
x = (double)(dd + 1) / divided;
}
return x;
}
f *= Math.pow(10, n);
f = Math.round(f);
f /= Math.pow(10, n);
return f;
}
public static double myRound (double x, int y) {
int divided = 1;
for(int i = 0; i < y; i++){
x = x * 10;
divided = divided * 10;
}
return (double)((int) (x + .5d)) / divided;
}
public static double myRound (double x, int y) {
long divided = 1;
for(int i = 0; i < y; i++){
x = x * 10;
divided = divided * 10;
}
return (double)((long) (x + .5d)) / divided;
}