站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题如何把double类型四舍五入到小数后两位,急

如何把double类型四舍五入到小数后两位,急

摘要: 如何把double类型四舍五入到小数后两位,急


例如:
double d1=3.43621;
double d2=3.0;
用什么方式能把这两个变量用同一种方法四舍五入到小数后两位
显示为
d1=3.44;
d2=3.00;


1. double value = 22.365454;

DecimalFormat df = new DecimalFormat("##.00");
value = Double.parseDouble(df.format(value));
System.out.println(value);


2. double d = 22.365434;
BigDecimal a = new BigDecimal(d);
//第一个参数2是小数点后保留几位,第二个2是四舍五入(如果为1则直接舍掉后面多余的位)
System.out.println("a.setScale(2,2)=" + a.setScale(2, 2));


转贴

// 四舍五入取小数点后 2 位。
float f = 1.234567F;
f = float.Parse(f.ToString("F2"));
Console.WriteLine(f.ToString());


Math.Round()这个是四舍五入的
f.ToString("0.00");这个只是用来显示的

double d = 1.234567;
Console.WriteLine(d.ToString("F"));



Math.Round(double1, 2);
這是最正宗的方法如果你要隻顯示到屏幕也可以這樣
Console.WriteLine(double1.ToString("###,###,###.##");


很多都是四舍五入的,只好用这个笨办法:

double d = (double)((long)(2.378325*100))/100;
MessageBox.Show(d.ToString(".##"));



刚才贴的那个方法如果末尾刚好是0数字就会不足2位小数位,改为这个:

MessageBox.Show(((double)((long)(45452.318325*100))/100).ToString(".00"));

例如:2.3023 处理后得到 2.30



double aa=345.6443;
int bb;
Decimal cc;
bb=Decimal.Round(aa,2);
OK了




double d = 2.378325;
d = double.Parse(d.ToString("0.00"));
不过这样会四舍五入,结果是2.38



1/string str="2.378325";
str=str.Substring( x,y);用remove也可以
2/double d = 2.378325*100;……这样就更好处理一些





笨方法

double d=2.378325;
int i=d.ToString().LastIndexOf(".");
if(i!=-1)
{
d=Convert.ToDouble(d.ToString().Substring(0,i+3));
}
else
{
d=d;

}



日了,DF嫌疑!


晕,人家都回的那么全,得分多是应该的呀,又不是没有给你分


I服了YOU!
错误的也叫全??
=========================
double d = 2.378325;
d = double.Parse(d.ToString("0.00"));
不过这样会四舍五入,结果是2.38

=========================
看看这代码能执行不???

错误百出


看看上面的代码,有几行是能执行的???
还全呢!!!


上面的代码没有一种在JAVA中是正确的!明显的不是JAVA代码


你写的就好吗,你试试你写的代码哪个能四舍五入
第一个3.145四舍五放应该是3.15你的确是3.14,要到6的时候才会进位
第二个可是真进位呀,不管第三位是什么都进位,包括0在内
我给你分就不错了,那位得分多的,在这里写的可能不对,不过最起码在思想上能给我不少提示,你的呢,只能误导人


你丫的煞笔,第一个要是5不进我把代码吃了,煞笔一个
第二个是老子疏忽没说清楚,我承认!第二个参数应该是5才正确!

还给你不少思想上提示,我靠,吗的语法都不对, double.Parse()不是对象的东西都拿来调用方法,我不知道从那里能给你思想上提示!

吗的郁闷!跟你个煞笔较什么劲!
吗的老子热心帮助你,帮你纠正别人的错误,你他吗还狗咬吕洞宾,我真他吗的贱!



你个傻逼,你快吃了吧,第一个就是到6才进位的,5还真就不进,不信你可以自己去试,四舍五入我是按下面的思想自己编的,你那个真的都不好使呀


没办法!人品差连计算机都看不起!哈哈!
老子第一种方法用了这么多年了都是5以上进!


年轻人,要走的路还很长!这种基础的问题还要搞这么久!还要把对的说成错的!JAVA API都不会用!靠这样的学习态度JAVA才刚入门!学习态度和方法还都差太远!其实上面我提到的两个类都是JAVA中用来处理数字格式化问题的!好的学生当知道这两个类的时候就应该已经知道怎么做了!类里面原代码,不是找不到!只是看你是否愿意去挖掘!
奉劝你一句,正确的学习方法和态度才是你走出困境的钥匙!态度将决定你的未来!
还很多的问题需要你自己慢慢体会!我就不说了,说多了也不好!
今天从你这我也学到了东西,虽然你让我很生气,但是还是应该感谢你的!因为你让我更加坚定确信的知道了第一种用法的正确性,第二种用法我一般不常用,今天我也把第二种用法研究的更加透彻了!
三人行,必有我师!记得尊重别人你才能赢得天下!
请记住一个前辈的肺腑!对你没有坏处!



最后一个回帖,收回上面的脏话!一时气愤,请见凉!不过"我给你分就不错了"你这句确实让人很气愤!

提醒你一句,在CSDN上喜欢帮助别人热心肠的人很多!如果没有这些人你的问题谁来解答?而今天你却严重侮辱了这些人的其中之一!当然我不会因此而降低我帮助新人的热情!因为我也曾经无知过!只是想告诉你这些人值的你去尊重!希望不会再有第二个我出现!


谢谢你的教悔,以后我会注意这个问题的,不过我还是要说第一个方法的确是到6才进位的,这是我试过之后才说的,要不我不会说到6才进位的,由于我JAVA学的时间短又一直在学新的框架,所以JAVA基础很差,在上面多有得罪还请见凉,对不起,以后我会注意的


对了,还有就是第一个不能进行格式化,2.3最后输出还是2.3而不是2.30


通过查找API我发现你的第二种方法不错,不过里面的第二个参数要四舍五入的话也不是5而是4



要学会变通,不要死用别人给你的答案.那只是其中一种用法而已,应该再仔细研究DecimalFormat此类的用发:
DecimalFormat此类格式化数字以后返回的是字符串,用#号格式化,位数不够的时候不补0,用0格式化位数不够的时候补0.

我上面给你写的是把格式化后的字符串转化成了double类型的数字,自然会把多余的无意义的0去掉!你直接输出System.out.println(df.format(value));就能看到真实效果!


当然输出的还是不补0的了,我要是连这点都想不到都试,那我还真是别去当程序员了,我一直不明白的是一件事,为什么用这个方法在输出的时候大于2的尾数取小数后两位的四舍五入都好使,等小于2大于0的就不理想了,例0.015输出就会是0.01,页0.0151则输出0.16,小于0的我没试,所以我当时很生气,就没给你太多的分,最后我是按double d = (double)((long)(2.378325*100))/100;
的这个思想自己编的算法,这是我很郁闷的事,Java API的这个方法我都看了,就差没看原码了


↑返回目录
前一篇: 问一个Double类里的isNaN(double v)方法问题
后一篇: 问一个JNI的难题?!