黑马程序员技术交流社区
标题:
浮点型数据的小数点问题<已解决>
[打印本页]
作者:
吴扬
时间:
2012-6-13 23:48
标题:
浮点型数据的小数点问题<已解决>
本帖最后由 吴扬 于 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有没有提供什么方法实现?可不可以自己实现这个功能呢?
作者:
杨雪
时间:
2012-6-13 23:54
本帖最后由 杨雪 于 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);
额。。。其实突然想到如果用正则会更简单哈
作者:
余银桂
时间:
2012-6-13 23:58
如果需要精确计算,推荐使用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 表示浮点型
仅供参考!
作者:
曾_强
时间:
2012-6-14 00:31
转一个结果: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));
作者:
揭耀祖
时间:
2012-6-14 13:14
自己写个函数就可以了,如下:
public static double exact3(double d)
{
double i = d*1000;
int j = (int)i;
double w = (double)j/1000;
return w;
}
这是精确到三位的。
作者:
吴扬
时间:
2012-6-16 20:18
谢谢大家,现在知道了,能够实现的方法还挺多的,java也提供了自己的方法,看来自己对API还是不怎么熟悉,还得多练习!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2