黑马程序员技术交流社区

标题: 需求: 给定一个小数,保留小数的后两位?怎么写 [打印本页]

作者: Eagle    时间: 2014-11-1 22:12
标题: 需求: 给定一个小数,保留小数的后两位?怎么写
本帖最后由 Eagle 于 2014-11-3 14:28 编辑

/*
需求:
给定一个小数,保留小数的后两位。

*/
毕老师视频里说的。
完全没有思路。
除了转成字符串切割判断长度这个想法。。也就想想
没有式。。感觉肯定不是这么做的。。
大神指导指导呗
作者: feng_0207    时间: 2014-11-1 23:23
  1. public static void main(String[] args) {
  2.                 DecimalFormat df2 = new DecimalFormat("###.00");
  3.                 double d = 23.3432432;
  4.                 System.out.println(df2.format(d));

  5.         }
复制代码

作者: feng_0207    时间: 2014-11-1 23:25
feng_0207 发表于 2014-11-1 23:23

DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。
符号含义:
  0 一个数字
  # 一个数字,不包括 0
  . 小数的分隔符的占位符
以前用过这个类,所以留意了一下
作者: cs8630323    时间: 2014-11-1 23:41
System.out.printf("%.2f",2.2222);
printf方法有点复杂,有兴趣去查这方面资料
作者: 姜浩    时间: 2014-11-2 00:36
cs8630323 发表于 2014-11-1 23:41
System.out.printf("%.2f",2.2222);
printf方法有点复杂,有兴趣去查这方面资料

亲,printf不是C中的吗?
作者: 戏言丶    时间: 2014-11-2 00:39
保留后面两位是四舍五入还是直接去掉?可以先将这个数*100转变成int类型,然后再/100转换成double类型。如果是四舍五入就需要在转成int类型的时候用Math函数中的round方法取其最接近的int整数。
作者: cs8630323    时间: 2014-11-2 00:52
姜浩 发表于 2014-11-2 00:36
亲,printf不是C中的吗?

java可以调C
看API
作者: 姜浩    时间: 2014-11-2 00:59
cs8630323 发表于 2014-11-2 00:52
java可以调C
看API

受教了,我去试试。
作者: jacoblx    时间: 2014-11-2 08:42
姜浩 发表于 2014-11-2 00:59
受教了,我去试试。

不是调用的C吧,是原生支持printf格式化输出的。
作者: Paul_Chang    时间: 2014-11-2 11:43
本帖最后由 Paul_Chang 于 2014-11-2 12:21 编辑
戏言丶 发表于 2014-11-2 00:39
保留后面两位是四舍五入还是直接去掉?可以先将这个数*100转变成int类型,然后再/100转换成double类型。如 ...

num = (double)(int)(num*100)/100;
貌似对于(-0.01,0.01)区间内的数不行,还有例如2.3000或者2.3001这类数据不行...怎么破!
作者: Paul_Chang    时间: 2014-11-2 11:54
feng_0207 发表于 2014-11-1 23:25
DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。
符号含义:
  0 一个数字

对于(-1,1)区间内的数字岂不是要将"###.00"改为"##0.00"才可以...
  1. public static void main(String[] args) {
  2.                 DecimalFormat df2 = new DecimalFormat("##0.00");
  3.                 double d = 23.3432432;
  4.                 System.out.println(df2.format(d));

  5.         }
复制代码



作者: feng_0207    时间: 2014-11-2 12:34
Paul_Chang 发表于 2014-11-2 11:54
对于(-1,1)区间内的数字岂不是要将"###.00"改为"##0.00"才可以...

试一下这个
DecimalFormat df2 = new DecimalFormat("0.00");
共同探讨。
作者: Paul_Chang    时间: 2014-11-2 12:57
feng_0207 发表于 2014-11-2 12:34
试一下这个
DecimalFormat df2 = new DecimalFormat("0.00");
共同探讨。

哈哈,发完就试了,完全可以...
作者: feng_0207    时间: 2014-11-2 13:01
Paul_Chang 发表于 2014-11-2 12:57
哈哈,发完就试了,完全可以...

:handshake
作者: 戏言丶    时间: 2014-11-2 15:04
Paul_Chang 发表于 2014-11-2 11:43
num = (double)(int)(num*100)/100;
貌似对于(-0.01,0.01)区间内的数不行,还有例如2.3000或者2.3001这类数 ...

加上String result = String.format("%.2f",d);输出result就是保留两位小树
作者: zhangyangLengen    时间: 2014-11-2 20:03
顶一个,不错,学到新知识
作者: Eagle    时间: 2014-11-3 07:54
feng_0207 发表于 2014-11-1 23:23

..这个还没有学到。。。现在只学到IO的FileReader。。
作者: Eagle    时间: 2014-11-3 07:55
feng_0207 发表于 2014-11-1 23:25
DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。
符号含义:
  0 一个数字

恩恩。虽然不会用。谢谢了。呵呵
作者: Eagle    时间: 2014-11-3 08:00
cs8630323 发表于 2014-11-1 23:41
System.out.printf("%.2f",2.2222);
printf方法有点复杂,有兴趣去查这方面资料

恩恩,好的,谢谢:D
作者: Eagle    时间: 2014-11-3 08:01
戏言丶 发表于 2014-11-2 00:39
保留后面两位是四舍五入还是直接去掉?可以先将这个数*100转变成int类型,然后再/100转换成double类型。如 ...

这个好像不能规定取多少位小数啊
作者: Eagle    时间: 2014-11-3 08:02
feng_0207 发表于 2014-11-2 12:34
试一下这个
DecimalFormat df2 = new DecimalFormat("0.00");
共同探讨。

现在基础还没有学到。学习了
作者: Eagle    时间: 2014-11-3 08:06
戏言丶 发表于 2014-11-2 15:04
加上String result = String.format("%.2f",d);输出result就是保留两位小树

理解了。。原来如此。。。哈哈。哥们聪明啊。顶一个
作者: Eagle    时间: 2014-11-3 08:10
戏言丶 发表于 2014-11-2 15:04
加上String result = String.format("%.2f",d);输出result就是保留两位小树

还是不行的。不知道为啥。
  1. {
  2.         public static void main(String[] args)
  3.         {
  4.                 double d = 12.3546;
  5.                 int x =(int)d*100;
  6.                 double y = x/100;
  7.                 sop(y);
  8.                 String result = String.format("%.2f",y);
  9.                 sop(result);
复制代码


运行结果:
E:\java\day18>java MathTest
12.0
12.00

作者: Eagle    时间: 2014-11-3 08:20
feng_0207 发表于 2014-11-1 23:25
DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。
符号含义:
  0 一个数字

用了一下,感觉不错,。呵呵。谢谢了。
作者: 戏言丶    时间: 2014-11-3 11:20
Eagle 发表于 2014-11-3 08:10
还是不行的。不知道为啥。

首先,你*100转成int类型的时候就错了,应该是int x = (int)(d*100);如果像你那样的话是先把d转成int再*100,这样就将后面的小数全舍去了。然后,你/100的时候应该先把x转成double类型,即double y = (double)x/100;否则x/100时x为int类型得到的会是一个int类型,然后才自动转为double类型。
作者: Eagle    时间: 2014-11-3 12:47
戏言丶 发表于 2014-11-3 11:20
首先,你*100转成int类型的时候就错了,应该是int x = (int)(d*100);如果像你那样的话是先把d转成int再*1 ...

额。原来如此。。呵呵,谢谢了,这次能行了。
作者: 郑飞    时间: 2014-11-4 06:47
还没学到的话 可以先自己写个土办法
  1. public class Test {
  2.         public static void main(String[] args)
  3.         {
  4.                 double d = 3.1415926;
  5.                 d = (double)(int)((d+0.005)*100)/100;
  6.                 System.out.println(d);
  7.         }     
  8. }
复制代码

作者: 桃华月禅    时间: 2014-11-4 19:49
我当初就是*100取整,再除100double强转即可了!
不过在这里受教了,确实没想到能够用正则表达式!
还有那个DecimalFormat类,我连听都没听过
printf这个也是第一次听...




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