黑马程序员技术交流社区

标题: 给定一个小数,保留两位小数 [打印本页]

作者: 李贺晓    时间: 2012-11-22 20:17
标题: 给定一个小数,保留两位小数
class MathDemo
{
public static void main(String[] args)
{
  System.out.println(getDouble(1.23456));
  System.out.println(getDouble(0.46656));
  System.out.println(getDouble(-5.23456));
}
public static double getDouble(double b)
{
  double a=Math.round(b*100);//将次小数乘以100,然后四舍五入
  double c=a/100;//将得到的数除以100
  return c;
}
}
把一个小数保留两位小数。。。大家把自己的程序都贴上来,看看哪种方法比较简介,更好

作者: 舒远    时间: 2012-11-22 20:50
import java.math.BigDecimal;
import java.math.RoundingMode;

public class Decimal {
        public static void main(String[] args) {
                BigDecimal bDecimal = new BigDecimal("12.305");
                bDecimal = bDecimal.setScale(2, RoundingMode.HALF_UP);
                System.out.println(bDecimal.doubleValue());
        }
}
作者: 王震阳老师    时间: 2012-11-22 21:14
2行代码搞定。就是阅读性差,但是数据兼容类型要比楼主的好很多。代码见下面:
  1. class MathDemo
  2. {
  3.         public static void main(String[] args) //该代码不仅可以对整型、只含有一个小数,含有2个小数,和含有2个小数以上的double型进行操作,丰富了对数据的兼容性
  4.         {                                                                                //为了尽最大努力压缩代码量,该程序易读性比较差。
  5.                   getDouble(123);
  6.                   getDouble(4.5);
  7.                   getDouble(6.789);
  8.                   getDouble(0.46656);
  9.                   getDouble(-5.23456);
  10.         }
  11.         public static void getDouble(double b)//只有2行代码,不仅实现了预期目标还增强了对数据的兼容类型
  12.         {
  13.                   String[] buff=String.valueOf(b).replace(".",":").split(":");
  14.                   System.out.println(buff[0]+"."+buff[1].substring(0,(buff[1].length()>=2)?2:((buff[1].length()==1)?1:0)));
  15.         }
  16. }
复制代码

2句话搞定保留数据位问题.jpg (40.7 KB, 下载次数: 90)

2句话搞定保留数据位问题.jpg

作者: 王震阳老师    时间: 2012-11-22 21:18
  1.         //楼主可以将代码压缩到一行
  2. class MathDemo2
  3. {
  4. public static void main(String[] args)
  5. {
  6.   System.out.println(getDouble(1.23456));
  7.   System.out.println(getDouble(0.46656));
  8.   System.out.println(getDouble(-5.23456));
  9. }
  10. public static double getDouble(double b)
  11. {
  12.   return (Math.round(b*100))/100;
  13. }
  14. }
复制代码

作者: jerry2627    时间: 2012-11-22 21:35
public class demo10 {
        public static void main(String[] args) {
                String str = new Double(13434.23322).toString();       
                str = str.substring(0, str.indexOf(".")+3);
                System.out.println(Double.parseDouble(str));
        }
}
作者: 李贺晓    时间: 2012-11-22 21:51
jerry2627 发表于 2012-11-22 21:35
public class demo10 {
        public static void main(String[] args) {
                String str = new Double(13434.2332 ...

这种方法不行,没有考虑到四舍五入的情况,你这样是直接把小数点两位以后的直接舍去了
作者: 李贺晓    时间: 2012-11-22 21:57
舒远 发表于 2012-11-22 20:50
import java.math.BigDecimal;
import java.math.RoundingMode;

这个方法不错,猛一下还真是想不到要用这种方法
作者: 李贺晓    时间: 2012-11-22 22:03
王震阳 发表于 2012-11-22 21:14
2行代码搞定。就是阅读性差,但是数据兼容类型要比楼主的好很多。代码见下面: ...

你这种方法,如果小数点后小于两位的话,得出的结果也不正确啊,只保留了一位小数
作者: 李贺晓    时间: 2012-11-22 22:12
王震阳 发表于 2012-11-22 21:14
2行代码搞定。就是阅读性差,但是数据兼容类型要比楼主的好很多。代码见下面: ...

加了个对小数后的位数进行判断的
class MathDemo1
{
        public static void main(String[] args) //该代码不仅可以对整型、只含有一个小数,含有2个小数,和含有2个小数以上的double型进行操作,丰富了对数据的兼容性
        {                                                                                //为了尽最大努力压缩代码量,该程序易读性比较差。
                  getDouble(123);
                  getDouble(4.5);
                  getDouble(6.789);
                  getDouble(0.46656);
                  getDouble(-5.23456);
        }
        public static void getDouble(double b)//只有2行代码,不仅实现了预期目标还增强了对数据的兼容类型
        {
                  String[] buff=String.valueOf(b).replace(".",":").split(":");
                  //System.out.println(buff[0]+"."+buff[1].substring(0,(buff[1].length()>=2)?2:((buff[1].length()==1)?1:0)));
      //当小数点后大于两位时
      if(buff[1].length()>=2)
     {
       System.out.println(buff[0]+"."+buff[1].substring(0,2));
     }
     //小数点后只有一位时
     else if(buff[1].length()==1)
     {
      System.out.println(buff[0]+"."+buff[1].substring(0,1)+"0");
     }
     //小数点后没有位数时
     else
     {
      System.out.println(buff[0]+".00");
     }
        }
}
看看有没有把后面的判断改的更简单点的

QQ截图20121122221155.png (1.35 KB, 下载次数: 97)

输出结果

输出结果

作者: 舒远    时间: 2012-11-22 22:15
JDK提供了那么好的四舍五入的方法,干吗不用?老毕不是说过的吗,不要重复造轮子。我们应该找对象来帮我们做事!
至于小数点后小于两位的,你还四舍五入成两位的?这不明显多此一举么?
作者: 王震阳老师    时间: 2012-11-22 22:55
其实感觉最容易想到的还是楼主的方法,直接四舍五入,再乘以100.




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