黑马程序员技术交流社区

标题: 复习到一个小程序,没思路 [打印本页]

作者: 魏亮    时间: 2012-11-21 15:36
标题: 复习到一个小程序,没思路
/*
练习。给定一个小数。
保留该小数的后两位。

选作。可以考虑,保留时进行四舍五入。

*/

//小问题,可我自己不知道怎么下手。。。。大家给个思路

作者: 坚持远方    时间: 2012-11-21 16:21
public class Asd {
public static Double format(double data,int scope){
  //10的位数次方 如保留2位则 tempDouble=100
  double tempDouble=Math.pow(10, scope);//tempDouble=10的scope次方
  //原始数据先乘tempDouble再转成整型,作用是去小数点
  data=data*tempDouble;//让data变成原来的多少倍,现在是需要保留两位小数,所以先让他变大100倍
  int tempInt=(int) data;//再将变大后的数强转成int,为的是去掉变大后的数的小数点后的数
  //返回去小数之后再除tempDouble的结果
  return tempInt/tempDouble;再让得到的int型的数缩小100倍,就是原来的数保留两位小数的结果
}
public static void main(String[] args) {
  System.out.println(format(123.123123123,2));
}
}


作者: 坚持远方    时间: 2012-11-21 16:22
没有四舍五入的效果
作者: 黑马吕世成    时间: 2012-11-21 16:46
你可以先加上0.005之后再按上面执行,这样就有四舍五入了。
作者: 邵天强    时间: 2012-11-21 16:51
你可以定义一个BigDecimal来解决这个问题
如下:
package com.itheima.test;
import java.math.BigDecimal;
public class Test2 {
public static void main(String[] args) {
  double val=23.335;
  BigDecimal bd1 = getBigDecimal(val);//调用方法,把double转化成BigDecimal
  System.out.println(bd1.doubleValue());//然后将BigDecimal转换成我们需要的double
}
    //把double转换成BigDecimal
private static BigDecimal getBigDecimal(double val) {
  BigDecimal bd=new BigDecimal(val);//把double转换成BigDecimal
  /**
   * 返回一个 BigDecimal,保留两位小数
   * ROUND_HALF_UP:是BigDecimal中的一个常量, 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式
   */
  BigDecimal bd1=bd.setScale(2, BigDecimal.ROUND_HALF_UP);
  return bd1;
}
}


作者: 魏亮    时间: 2012-11-26 07:53
多谢楼上。。。
作者: 魏亮    时间: 2012-11-26 07:57
坚持远方 发表于 2012-11-21 16:21
public class Asd {
public static Double format(double data,int scope){
  //10的位数次方 如保留2位则 ...

多谢,这个就是我想要的方法




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