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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 寇龙飞 于 2012-9-15 18:22 编辑
  1. package com.itheima.test;


  2. public class KeyTest2 {

  3.         public static void main(String[] args) {
  4.                 double data = 3.1415926;
  5.                 data = setDoubleFormat(data, 1);
  6.                 System.out.println(data);
  7.                 data = setDoubleFormat(data, 2);
  8.                 System.out.println(data);
  9.                 data = setDoubleFormat(data, 3);
  10.                 System.out.println(data);
  11.                 data = setDoubleFormat(data, 4);
  12.                 System.out.println(data);
  13.         }

  14.         /*想要实现的功能:返回val小数点后newScale位的数字*/
  15.         public static double setDoubleFormat(double val, int newScale) {
  16.                
  17.                 return (int)(val * Math.pow(10, newScale)) / Math.pow(10, newScale);
  18.         }
  19. }
复制代码
咋打印结果全是3.1啊?
  1. 3.1
  2. 3.1
  3. 3.1
  4. 3.1
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

8 个回复

正序浏览
黑马王建伟 发表于 2012-9-15 17:24
楼主不用自己写了,麻烦,有直接可以用的类,有好多的,随便举个例子:运行结果:

3.142

有道理。谢谢你哦。你进14期吗?加个好友吧。以后应该就是同学了。
回复 使用道具 举报
楼主不用自己写了,麻烦,有直接可以用的类,有好多的,随便举个例子:
  1. package com.lianxi;
  2. import java.text.NumberFormat;
  3. public class NumberFormat_class {
  4.         public static void main(String[] args) {
  5.                     double d=3.1415926;
  6.                     double d1=2.5;
  7.                     NumberFormat n=NumberFormat.getInstance();
  8.             n.setMinimumFractionDigits(3);//指定保留几位有效数字
  9.             System.out.println(n.format(d));
  10.             System.out.println(n.format(d1));
  11.         }
  12. }
复制代码
运行结果:

3.142
2.500
回复 使用道具 举报
你应该新建data1,data2...出来,要不然调用(data,1)时,返回的data就是3.1了,后面的小数已经损失了。
或者不创建新变量,按小数位从大到小的顺序排列

点评

嗯。了解。谢谢你!  发表于 2012-9-15 18:19
回复 使用道具 举报
现在是问题找出来了。但是,感觉这个函数不严谨,如果数是3.1,要保留小数点后四位有效数字呢,怎么实现?
  1. package com.itheima.test;


  2. public class KeyTest2 {

  3.         public static void main(String[] args) {
  4.                 double data = 3.1;
  5.                 System.out.println(setDoubleFormat(data, 4));
  6.         }

  7.         /*想要实现的功能:返回val小数点后newScale位的数字*/
  8.         public static double setDoubleFormat(double val, int newScale) {
  9.                
  10.                 return (int)(val * Math.pow(10, newScale)) / Math.pow(10, newScale);
  11.         }
  12. }
复制代码
回复 使用道具 举报
黑马王建伟 发表于 2012-9-15 16:49
楼主,你把data这个变量的值来回调,第一次执行完data的值就是3.1,其后每次调用data的值都是3.1,所以打印 ...

对哦对哦,我晕死。只在意自定义函数本身了。谢谢哥们。
回复 使用道具 举报
马睿 发表于 2012-9-15 16:36
这个问题昨天有人问过
星门:http://bbs.itheima.com/thread-25637-1-1.html
提供了数种解决方法……希望能 ...

这个人就是我哦。

我现在自己写了一个函数,有点问题错误。故来提问
回复 使用道具 举报
本帖最后由 黑马王建伟 于 2012-9-15 16:51 编辑

楼主,你把data这个变量的值来回调,第一次执行完data的值就是3.1,其后每次调用data的值都是3.1,所以打印的值都是3.1,看代码,不要每次把调用的值都赋回去就行了。
  1. package com.lianxi;

  2. public class A {

  3.         public static void main(String[] args) {
  4.                 double data = 3.1415926;
  5.                 System.out.println(setDoubleFormat(data, 1));
  6.                 System.out.println(setDoubleFormat(data, 2));
  7.                 System.out.println(setDoubleFormat(data, 3));
  8.                 System.out.println(setDoubleFormat(data, 4));
  9.         }
  10.         /*想要实现的功能:返回val小数点后newScale位的数字*/
  11.         public static double setDoubleFormat(double val, int newScale) {
  12.                 return (int)(val * Math.pow(10, newScale)) / Math.pow(10, newScale);
  13.         }
  14. }
复制代码
打印结果:
3.14
3.141
3.1415




评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这个问题昨天有人问过
星门:http://bbs.itheima.com/thread-25637-1-1.html
提供了数种解决方法……希望能帮到你……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马