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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. //输入一个小数要求保留该小数的后两位

  2. class  MathDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 printNum(7.56);
  7.         }

  8.         public static void printNum(double num)
  9.         {
  10.                 double x=Math.floor(num);//返回小于num的最大整数
  11.                 sop("该小数的后两位是:"+(num-x));
  12.         }

  13.         public static void sop(Object obj)
  14.         {
  15.                 System.out.println(obj);
  16.         }
  17. }
复制代码

7 个回复

倒序浏览
浮点数是无法在计算机中准确表示的,例如0.1在计算机中只是表示成了一个近似值,因此,对符点数的运算时结果具有不可预知性
float和double只能用来作科学计算或者是工程计算,但在商业计算中要用java.math.BigDecimal

这也是在网上找的资料,参照你的写的。具体的也不是很清楚 !

  1. import java.math.*;
  2. class MathDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 printNum(3.34);
  7.         }
  8.         public static void printNum(double num)
  9.         {
  10.                 double  x = Math.floor(num);
  11.                 System.out.println(x);
  12.                 System.out.println(MathTest.sub(num,x));
  13.         }
  14. }
  15. class MathTest
  16. {
  17.         public static double sub(double d1,double d2)
  18.         {
  19.         //将d1转换为字符串类型,再转换为BigDecimal类型。
  20.         BigDecimal b1=new BigDecimal(Double.toString(d1));     
  21.         BigDecimal b2=new BigDecimal(Double.toString(d2));

  22.          //b1.subtract(b2) 返回一个 BigDecimal,其值为(b1-b2)
  23.         //doubleValue()  将BigDecimal类型转换为double类型;
  24.         return (b1.subtract(b2)).doubleValue();     
  25.         }
  26. }
复制代码



评分

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

查看全部评分

回复 使用道具 举报
           学习了
回复 使用道具 举报
学习了  
回复 使用道具 举报
我以另一种方法做的,结果出来了,不知道是不是你想要的,

  1. public static void main(String[] args)
  2.      {
  3.                  
  4.                  printNum(7.56);
  5.      }

  6.      public static void printNum(double num)
  7.      {
  8.             String num1 = Double.toString(num);
  9.             //sop("x=" + num1); //测试打印num1的值
  10.             String[] num2 = num1.split("\\.");//以小数点切割
  11.             //sop(num2.length);//测试打印长度
  12.             String str = null;
  13.             for(int i = 0; i < num2.length; i++){
  14.                     str = num2[1];//一个小数以小数点切割,装入数组,角标为1的值既小数点后的值
  15.             }
  16.             sop("该小数的后两位是:   " + str);//

  17.      }

  18.      public static void sop(Object obj)
  19.      {
  20.              System.out.println(obj);       
  21.      }
复制代码
回复 使用道具 举报
  1. //带四舍五入的
  2. public class Demo {
  3.         public static void main(String[] args) {
  4.                 double d = 23.4565;
  5.                 d = demo(d);
  6.                 System.out.println(d);
  7.         }
  8.         public static double demo(double d){
  9.                 int x = (int)((d+0.005)*100);
  10.                 d = x;
  11.                 return d/100;
  12.         }
  13. }

  14. //不带四舍五入的
  15. public class Demo2 {
  16.         public static void main(String[] args) {
  17.                 double d = 23.4565;
  18.                 d = demo(d);
  19.                 System.out.println(d);
  20.         }
  21.         public static double demo(double d){
  22.                 int x = (int)(d*100);
  23.                 d = x;
  24.                 return d/100;
  25.         }
  26. }
复制代码
回复 使用道具 举报
yogaa 中级黑马 2014-6-18 23:08:26
7#
    在你原码上改的,已测试,可以运行~
    public static void main(String[] args) {

                printNum(7.85);
        }

        public static void printNum(double num) {
                double x = Math.floor(num);
                Double b = num - x;
                char[] c = b.toString().toCharArray();
                String s = b.toString();
                System.out.print(num+"小数点后两位是:");
                for (int i = 0; i < c.length; i++) {
                        if (i < 3) {
                                sop(c[i]);
                        } else if (i == 3 && c[i + 1] >= 53) {                //整形数字5转换成char型值为53
                                c[i] += 1;
                                sop(c[i]);
                                break;
                        } else if (i == 3) {
                                sop(c[i]);
                                break;
                        }
                }
                System.out.println("(四舍五入)");
        }

        public static void sop(Object obj) {
                System.out.print(obj);
        }
}

回复 使用道具 举报
Fisherman 来自手机 初级黑马 2014-6-19 15:30:59
8#
学习啦,学习啦,谢谢喽
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马