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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李贺晓 中级黑马   /  2012-11-22 20:17  /  2331 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;
}
}
把一个小数保留两位小数。。。大家把自己的程序都贴上来,看看哪种方法比较简介,更好

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

10 个回复

倒序浏览
舒远 黑马帝 2012-11-22 20:50: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());
        }
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
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, 下载次数: 49)

2句话搞定保留数据位问题.jpg
回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
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));
        }
}
回复 使用道具 举报
jerry2627 发表于 2012-11-22 21:35
public class demo10 {
        public static void main(String[] args) {
                String str = new Double(13434.2332 ...

这种方法不行,没有考虑到四舍五入的情况,你这样是直接把小数点两位以后的直接舍去了
回复 使用道具 举报
舒远 发表于 2012-11-22 20:50
import java.math.BigDecimal;
import java.math.RoundingMode;

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

你这种方法,如果小数点后小于两位的话,得出的结果也不正确啊,只保留了一位小数
回复 使用道具 举报
王震阳 发表于 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, 下载次数: 52)

输出结果

输出结果
回复 使用道具 举报
舒远 黑马帝 2012-11-22 22:15:09
10#
JDK提供了那么好的四舍五入的方法,干吗不用?老毕不是说过的吗,不要重复造轮子。我们应该找对象来帮我们做事!
至于小数点后小于两位的,你还四舍五入成两位的?这不明显多此一举么?
回复 使用道具 举报
其实感觉最容易想到的还是楼主的方法,直接四舍五入,再乘以100.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马