黑马程序员技术交流社区

标题: 如何将一个小数通过四舍五入的方法保留指定的小数位数。 [打印本页]

作者: 飞鸟青崖    时间: 2013-5-10 20:29
标题: 如何将一个小数通过四舍五入的方法保留指定的小数位数。
本帖最后由 飞鸟青崖 于 2013-5-11 07:31 编辑

如:3.1415926,保留三位小数就是3.142.
注意:小数不定,要保留的位数也不定。
作者: 黑马-雷钊    时间: 2013-5-10 20:34
你好,这个可能需要将数字转换成字符串,然后再将字符串转换成数组。最后通过遍历数组,设置循环条件的方式来达到你的目的。然后将数组转换成字符串。不过我没那么试过。因为java默认是小数转整数直接取整数而不管小数的。
作者: ZhaoYuBetter    时间: 2013-5-10 20:39
使用 DecimalFormat 来格式化
double a = 3.1415926;
DecimalFormat dft = new DecimalFormat("#.###");
System.out.println(dft.format(a));
作者: rosv    时间: 2013-5-10 21:21
本帖最后由 rosv 于 2013-5-10 21:23 编辑
  1.     public static double ToNum(double d, int w)
  2.     { //d是要转换的数,w是保留的小数位
  3.         if (w < 0)
  4.         {
  5.             throw new RuntimeException("保留位数不能为负");
  6.         }
  7.         double roundw = Math.pow(10, w);//保留位数的10的此方
  8.         double result= Math.round(d * roundw) / roundw;
  9.         return result;
  10.     }
复制代码

作者: Sword    时间: 2013-5-10 21:30
有三种方法可以转换:
(一):这种方法方便:
  1. float   a   =   123.2334f;   
  2. float   b   =   (float)(Math.round(a*100))/100;(这里的100就是2位小数点,如果要其它位,如4位,这里两个100改成10000)
复制代码
(二):这个方法也简单,不过还要再转成float型:
  1.   import   java.text.DecimalFormat;      
  2.   String   a   =   new   DecimalFormat("###,###,###.##").format(100.12345   );
复制代码
(三):这个也可以用
  1. float   ft   =   134.3435f;   
  2.   int   scale   =   2;//设置位数   
  3.   int   roundingMode   =   4;//表示四舍五入,可以选择其他舍值方式,例如去尾,等等.   
  4.   BigDecimal   bd   =   new   BigDecimal((double)ft);   
  5.   bd   =   bd.setScale(scale,roundingMode);   
  6.   ft   =   bd.floatValue();
复制代码

作者: 李云峰    时间: 2013-5-10 21:32
你们好!我刚注册,我现在在传智播客java基础班上课。还没有学多少,很难帮上忙。
我用我最近学的方法做了一下  希望能给你帮助

//如何将一个小数通过四舍五入的方法保留指定的小数位数。
//如:3.1415926,保留三位小数就是3.142.
//注意:小数不定,要保留的位数也不定

class  Demo5
{
        public static void main(String[] args)
        {
                //我还不会随机产生变量
                double num = 3.141592;//这是随机产生的一个double类型的变量
                int x=3;//这是随机产生的数 ,是要保留几位小数用
                int  num1;
               
                for (int y=x+1;y!=0 ; y--)
                {
                        num=num*10;
                        //System.out.println(num);
                }
                num1 = (int)(num%10);
                if(num1>=5)
                {
                        num=(int)num/10;
                        num=(num+1);                       
                }       
                else
                 num=(int)num/10;
                for (int z=0; z!=x; z++)
                {
                        num=(double)num/10;
                }
                 System.out.println(num);
               
        }
}
作者: 飞鸟青崖    时间: 2013-5-11 07:26
黑马-雷钊 发表于 2013-5-10 20:34
你好,这个可能需要将数字转换成字符串,然后再将字符串转换成数组。最后通过遍历数组,设置循环条件的方式 ...

谢谢提供思路。
作者: 飞鸟青崖    时间: 2013-5-11 07:26
ZhaoYuBetter 发表于 2013-5-10 20:39
使用 DecimalFormat 来格式化
double a = 3.1415926;
DecimalFormat dft = new DecimalFormat("#.###");

学习了,还不知道有DecimalFormat这个类。
作者: 飞鸟青崖    时间: 2013-5-11 07:30
Sword 发表于 2013-5-10 21:30
有三种方法可以转换:
(一):这种方法方便:(二):这个方法也简单,不过还要再转成float型:(三):这个也可以用 ...

谢谢,学习了
作者: 飞鸟青崖    时间: 2013-5-11 07:30
rosv 发表于 2013-5-10 21:21

谢谢 。
作者: 飞鸟青崖    时间: 2013-5-11 07:31
李云峰 发表于 2013-5-10 21:32
你们好!我刚注册,我现在在传智播客java基础班上课。还没有学多少,很难帮上忙。
我用我最近学的方法做了 ...

我也是开始学,以前就没接触过。




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