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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package com.itheima.test;

  2. public class Ttt {

  3.         public static void main(String[] args) {
  4.                 System.out.println(120/360360.0 +"\r\n这结果太丑了,求治愈。如何保留小数点后指定位有效数字");
  5.         }
  6. }
复制代码

9 个回复

倒序浏览
本帖最后由 佟亚鹏 于 2012-9-14 22:20 编辑

例如:PI = 3.141592653  如果想保留两位有效数字,(int)PI * 100 -->变成了314  314 / 100 -->3.14
PI = ((int)PI * 100 )  /  100 = 3.14
回复 使用道具 举报
使用MathContext类
或者BigDecimal类
其中包含设置精度方法

点评

就是,咋用啊?有代码么?MathContext的api我是看得一头雾水。  发表于 2012-9-15 12:00
有代码吗?  发表于 2012-9-15 11:26

评分

参与人数 1技术分 +1 收起 理由
创出一片辉煌 + 1 赞一个!

查看全部评分

回复 使用道具 举报
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

public class test
{
        public static void main(String[] args)
        {
                double data = 13456.89898;
                NumberFormat df = NumberFormat.getInstance();
                df.setMaximumFractionDigits(2); //设置某个数的小数部分中所允许的最大数字位数。
                String retVal = df.format(data);
                System.out.println(retVal);
        }

}

点评

谢谢啊。  发表于 2012-9-15 12:10
回复 使用道具 举报
//保留小数点后两位小数
public   double   Number2(double   pDouble)
{
    BigDecimal     bd=new     BigDecimal(pDouble);
    BigDecimal     bd1=bd.setScale(2,bd.ROUND_HALF_UP);
    pDouble=bd1.doubleValue();
    long     ll   =   Double.doubleToLongBits(pDouble);
   
    return   pDouble;
}

回复 使用道具 举报
佟亚鹏 发表于 2012-9-14 22:18
例如:PI = 3.141592653  如果想保留两位有效数字,(int)PI * 100 -->变成了314  314 / 100 -->3.14
PI = ( ...

哥们思路很好。感谢。感谢。
不过,(int)PI * 100结果是300哦,要写成(int)(PI * 100)
  1. double p = (int)(3.1415926*100)/100;
复制代码
回复 使用道具 举报
吴通 发表于 2012-9-15 09:33
//保留小数点后两位小数
public   double   Number2(double   pDouble)
{
  1. package com.itheima.test;

  2. import java.math.BigDecimal;

  3. public class KeyTest2 {

  4.         public static void main(String[] args) {
  5.                 double data = 13456.89898;
  6.                 data = setDoubleFormat(data, 1);
  7.                 System.out.println(data);
  8.                 data = setDoubleFormat(data, 2);//要保留2位精度,这结果是。。。。。
  9.                 System.out.println(data);
  10.         }

  11.         public static double setDoubleFormat(double val, int newScale) {
  12.                 BigDecimal bd = new BigDecimal(val);
  13.                 BigDecimal temp = bd.setScale(newScale, BigDecimal.ROUND_HALF_UP);
  14.                 val = temp.doubleValue();
  15.                 return val;
  16.         }
  17. }
复制代码
打印结果小数点后都只有一位数字啊。还有个0呢?
  1. 13456.9
  2. 13456.9
复制代码
回复 使用道具 举报
寇龙飞 发表于 2012-9-15 11:10
哥们思路很好。感谢。感谢。
不过,(int)PI * 100结果是300哦,要写成(int)(PI * 100) ...

呵呵,笔误
回复 使用道具 举报
寇龙飞 发表于 2012-9-15 11:10
哥们思路很好。感谢。感谢。
不过,(int)PI * 100结果是300哦,要写成(int)(PI * 100) ...

笔误哦,:P
回复 使用道具 举报
本帖最后由 马睿 于 2012-9-15 13:13 编辑

附送代码
  1.         MathContext context = new MathContext(5, RoundingMode.HALF_UP);
  2.         double num = 2.46464168;
  3.         BigDecimal bd = new BigDecimal(num, context);
  4.         System.out.println(bd);
复制代码
特别说明:MathContext中的第一个参数是精度位数,包括整数部分的,所以如果你要确认整数有多少位,然后再决定一共输出多少位,应该会做吧?(整除一下即可)

PS。。用上面谭立文 提到的NumberFormat的Format方法要注意返回的是String类型,好处是方便,不用计算位数

BigDecimal 是抽象类Number的子类,你可以doubleValue()方法将数据转回double数据类型
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马