黑马程序员技术交流社区
标题:
给一个小数,四舍五入保留后两位小数
[打印本页]
作者:
花开~的季节
时间:
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