黑马程序员技术交流社区

标题: 给一个小数,四舍五入保留后两位小数 [打印本页]

作者: 花开~的季节    时间: 2012-2-24 18:23
标题: 给一个小数,四舍五入保留后两位小数
怎么用Math中的方法,来求保留后的两位小数呢
用DcrimalFormat df=new DcrimalFormat("0.##");
String tt=df.format(12.34455);
s.o.p(tt)这个方式可以在math中
用 double d=Math.round(12.67346*100.0);
   d=d/100.0;可以输出12.67但
如果是12.697.结果就为12.7求解决
作者: 张建银    时间: 2012-2-24 19:04
此题可以用String来做,'.'前面的组成1个字符数组,'.'后面的所有数字字符可以组成1个字符数组,'.'后面的第3位如果大于等于5就上第二位加1,丢弃第三位,如果第二位+1=10,就让第一位+1,第二位变0,如果第一位+1=0,让.前面的个位+1,第一位变0,依次类推,直到'.'前面的所有数字判断完毕为止
作者: 沈样    时间: 2012-2-24 20:20
这个结果是对的round方法中会这样计算(long)Math.floor(a + 0.5d),所以第一次是这样计算的(12.67346*100.0+0.5=1267.846 这个除100就转成int变成1267/100为12.67,如果用12.697去计算就变成1269.7+0.5=1270.2转成int1270,再除100就变成了12.7
作者: tanlei200620    时间: 2012-2-24 21:54
经过实验,发现可以这样做的,代码如下:

        double d = 12323.659;
        System.out.println((int)d+Math.round(d%1*100)/100.0);//注意除数必须是 100.0

望采纳。
作者: 仵先进    时间: 2012-2-24 23:27
方法1
double i = 12.3659963; //设数值

int j = (int)Math.round(i * 100); //小数点后两位前移,并四舍五入

double k = (double)j / 100.00; //还原小数点后两位

方法2
double i=12.3659963;

//取两位小数

int j=(int)(i*100+0.5);

//把小数点后两位移动到个位,然后+0.5舍去小数

double k=(double)(i/100);

//重新移动到两位以后


+0.5再舍去小数就可以当作四舍五入
作者: 花开~的季节    时间: 2012-2-25 10:33
仵先进 发表于 2012-2-24 23:27
方法1
double i = 12.3659963; //设数值

可以解决了
作者: 花开~的季节    时间: 2012-2-25 10:34
{:soso_e128:}俄方呵呵
作者: tanlei200620    时间: 2012-2-25 22:18
继续思考(今天白天睡觉的时候在梦中发现实际应用有问题,呵呵,所以改进,怕误人那):
double d = 12323.659;
        System.out.println((int)d+Math.round(d%1*100)/100.0);//注意除数必须是 100.0
这样处理的话  会强制转换为  int  ,可定对于大的  double数据 要出问题, 同理  *100  的做法也会  出问题,如果 double的数够大的话  。

所以建议 用String  来把  double 数据进行 转换,具体实现代码如下:
第一个参数是要处理 的double值,第二个参数是打算 留下的小数位数。
        public static double getResult(double d,int x){
                String s = ""+d;
                String s1 = null;
                String s2 = null;               
                if(s.contains(".")){
                        StringBuilder sb = new StringBuilder();
                        while (sb.length()<x){
                                sb.append('0');
                        }
                        s1 = s.substring(0, s.indexOf('.'));
                        s2 = s.substring(s.indexOf('.'), s.length())+sb;
                        double d1 = Double.valueOf(s1);
                        double d2 = Double.valueOf(s2);
                        d = d1+Math.round(d2*Math.pow(10, x))/Math.pow(10, x);
                }
                return d;               
        }
作者: javaheima    时间: 2012-2-26 10:16
hhe egdfgafgdagfa
作者: 雷楚光    时间: 2012-2-26 10:35
很简单
double d;
int i,i1;
i=(int)d*1000+5;
i1=(int)i/10;
d=i1/100;






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2