A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

怎么用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求解决

评分

参与人数 1技术分 +1 收起 理由
admin + 1 解决了把!

查看全部评分

9 个回复

正序浏览
很简单
double d;
int i,i1;
i=(int)d*1000+5;
i1=(int)i/10;
d=i1/100;

回复 使用道具 举报
hhe egdfgafgdagfa
回复 使用道具 举报
继续思考(今天白天睡觉的时候在梦中发现实际应用有问题,呵呵,所以改进,怕误人那):
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;               
        }
回复 使用道具 举报
{:soso_e128:}俄方呵呵
回复 使用道具 举报
仵先进 发表于 2012-2-24 23:27
方法1
double i = 12.3659963; //设数值

可以解决了
回复 使用道具 举报
方法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再舍去小数就可以当作四舍五入

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
经过实验,发现可以这样做的,代码如下:

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

望采纳。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
这个结果是对的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
回复 使用道具 举报
此题可以用String来做,'.'前面的组成1个字符数组,'.'后面的所有数字字符可以组成1个字符数组,'.'后面的第3位如果大于等于5就上第二位加1,丢弃第三位,如果第二位+1=10,就让第一位+1,第二位变0,如果第一位+1=0,让.前面的个位+1,第一位变0,依次类推,直到'.'前面的所有数字判断完毕为止
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马