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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴扬 中级黑马   /  2012-6-13 23:48  /  3082 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴扬 于 2012-6-18 01:23 编辑

一个很简单的求圆面积的练习,代码如下
public class Circle
{
    double radius;
    final double PI = 3.14;

    Circle(double radius)
    {
          this.radius = radius;
    }

    public double getArea()
    {
          double area = PI*radius*radius;
          return area;  
    }
}

public class Test
{
    public static void main(String[] args)
    {
        System.out.println(new Circle(2.34).getArea());
    }
}
打印出来的结果是17.193384,如果小数点要精确到某一位,这个要怎么实现呢?API有没有提供什么方法实现?可不可以自己实现这个功能呢?

5 个回复

倒序浏览
本帖最后由 杨雪 于 2012-6-14 00:04 编辑

哎,首先这个问题你可不可以直接问: 17.193384,如果小数点要精确到某一位,这个要怎么实现呢?(简化问题)

小数点要精确到哪一位,我目前常用两种方法。

1:四舍五入
稍微懒点,java.text里有个DecimalFormat ,你懂的。但是一般自己写的话就判断,如果你想余2位,那你就自己在第三位上判断,大于5就进,小于5舍。

2:切割(如果你不需要舍入的话)有个subString的方法
double  x=17.193384;   
String  y=Double.toString(x);   
y=y.substring(0,3);   
x=Double.parseDouble(y);   

额。。。其实突然想到如果用正则会更简单哈
回复 使用道具 举报
如果需要精确计算,推荐使用BigDecimal

方式一:

四舍五入  
double   f   =   111231.5585;  
BigDecimal   b   =   new   BigDecimal(f);  
double   f1   =   b.setScale(1,   BigDecimal.ROUND_HALF_UP).doubleValue();  
保留两位小数  
---------------------------------------------------------------  

方式二:

java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");  
df.format(你要格式化的数字);

例:new java.text.DecimalFormat("#.0").format(3.1415926)

#.0 表示一位小数 #.00 表示两位小数 #.0000四位小数 以此类推...

方式三:

double d = 3.1415926;

String result = String .format("%.1f");

%.1f %. 表示 小数点前任意位数   1 表示两位小数 格式后的结果为f 表示浮点型

仅供参考!
回复 使用道具 举报
转一个结果:http://blog.csdn.net/yuhua3272004/article/details/3075436,楼主可以研究一下。
方式一:

四舍五入  
double   f   =   111231.5585;  
BigDecimal   b   =   new   BigDecimal(f);  
double   f1   =   b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();  
2表示保留两位小数  


方式二:

java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");  
df.format(你要格式化的数字);

例:new java.text.DecimalFormat("#.00").format(3.1415926)

#.00 表示两位小数 #.0000四位小数 以此类推...

方式三:

double d = 3.1415926;

String result = String .format("%.2f");

%.2f %. 表示 小数点前任意位数   2 表示两位小数 格式后的结果为f 表示浮点型

System.out.println(df.format(doube_var));


回复 使用道具 举报
自己写个函数就可以了,如下:
public static double exact3(double d)
        {
                double i = d*1000;
                                  int j = (int)i;
                double w = (double)j/1000;
               
                return w;
        }
这是精确到三位的。
回复 使用道具 举报
谢谢大家,现在知道了,能够实现的方法还挺多的,java也提供了自己的方法,看来自己对API还是不怎么熟悉,还得多练习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马