一个double问题 一个double类型的小数; double x=56.321; 有什么方法在不知道具体值的情况下使它的位数减少一位。 就像x变成56.32. x是要在TestField显示出来。给位大虾这怎么样能实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用BigDecimal可以做到,举个例子: /** * 与小数位精度精度取值方式: * * float/double的精度取值方式分为以下几种: <br> * java.math.BigDecimal.ROUND_UP <br> * java.math.BigDecimal.ROUND_DOWN <br> * java.math.BigDecimal.ROUND_CEILING <br> * java.math.BigDecimal.ROUND_FLOOR <br> * java.math.BigDecimal.ROUND_HALF_UP<br> * java.math.BigDecimal.ROUND_HALF_DOWN <br> * java.math.BigDecimal.ROUND_HALF_EVEN <br> */ /** * 对double数据进行取精度. * * @param value * double数据. * @param scale * 精度位数(保留的小数位数). * @param roundingMode * 精度取值方式. * @return 精度计算后的数据. */ public static double round(double value, int scale, int roundingMode) { BigDecimal bd = new BigDecimal(value); bd = bd.setScale(scale, roundingMode); double d = bd.doubleValue(); bd = null; return d; }下面是测试: //ROUND_UP //只要第2位后面存在大于0的小数,则第2位就+1 System.out.println(round(12.3401,2,BigDecimal.ROUND_UP));//12.35 System.out.println(round(-12.3401,2,BigDecimal.ROUND_UP));//-12.35 //ROUND_DOWN //与ROUND_UP相反 //直接舍弃第2位后面的所有小数 System.out.println(round(12.349,2,BigDecimal.ROUND_DOWN));//12.34 System.out.println(round(-12.349,2,BigDecimal.ROUND_DOWN));//-12.34 //ROUND_CEILING //如果数字>0 则和ROUND_UP作用一样 //如果数字<0 则和ROUND_DOWN作用一样 System.out.println(round(12.3401,2,BigDecimal.ROUND_CEILING));//12.35 System.out.println(round(-12.349,2,BigDecimal.ROUND_CEILING));//-12.34 //ROUND_FLOOR //如果数字>0 则和ROUND_DOWN作用一样 //如果数字<0 则和ROUND_UP作用一样 System.out.println(round(12.349,2,BigDecimal.ROUND_FLOOR));//12.34 System.out.println(round(-12.3401,2,BigDecimal.ROUND_FLOOR));//-12.35 //ROUND_HALF_UP [这种方法最常用] //如果第3位数字>=5,则第2位数字+1 //备注:只看第3位数字的值,不会考虑第3位之后的小数的 System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_UP));//12.35 System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_UP));//12.34 System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_UP));//-12.35 System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_UP));//-12.34 //ROUND_HALF_DOWN //如果第3位数字>=5,则做ROUND_UP //如果第3位数字<5,则做ROUND_DOWN System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_DOWN));//12.35 System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_DOWN));//12.34 System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_DOWN));//-12.35 System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_DOWN));//-12.34 //ROUND_HALF_EVEN //如果第3位是偶数,则做ROUND_HALF_DOWN //如果第3位是奇数,则做ROUND_HALF_UP System.out.println(round(12.346,2,BigDecimal.ROUND_HALF_EVEN));//12.35 System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_EVEN));//12.35希望对你有所帮助。 怎么设定setOneTouchExpandable只对一面有效;或者JSplitPane不改变组件大小? 求一个复杂度较优的乘方程序 java算法征方案 调用接口的继承类,编译时是不是不能使这些继承类得到编译? GUI GirdBagLayout布局 显示 求教一个JAVA小程序,谢谢. 又是乱码,郁闷中。。。 请教一个数据结构问题? 求MM MySQL JDBC Driver的文档 如何将一个字符串数组随机分配为两组数组 请教下ssh里src下各个包及里面的文件的作用 谁用过HttpURLConnection这个类,请进来看一下
* 与小数位精度精度取值方式:
*
* float/double的精度取值方式分为以下几种: <br>
* java.math.BigDecimal.ROUND_UP <br>
* java.math.BigDecimal.ROUND_DOWN <br>
* java.math.BigDecimal.ROUND_CEILING <br>
* java.math.BigDecimal.ROUND_FLOOR <br>
* java.math.BigDecimal.ROUND_HALF_UP<br>
* java.math.BigDecimal.ROUND_HALF_DOWN <br>
* java.math.BigDecimal.ROUND_HALF_EVEN <br>
*/
/**
* 对double数据进行取精度.
*
* @param value
* double数据.
* @param scale
* 精度位数(保留的小数位数).
* @param roundingMode
* 精度取值方式.
* @return 精度计算后的数据.
*/
public static double round(double value, int scale, int roundingMode) {
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(scale, roundingMode);
double d = bd.doubleValue();
bd = null;
return d;
}下面是测试: //ROUND_UP
//只要第2位后面存在大于0的小数,则第2位就+1
System.out.println(round(12.3401,2,BigDecimal.ROUND_UP));//12.35
System.out.println(round(-12.3401,2,BigDecimal.ROUND_UP));//-12.35
//ROUND_DOWN
//与ROUND_UP相反
//直接舍弃第2位后面的所有小数
System.out.println(round(12.349,2,BigDecimal.ROUND_DOWN));//12.34
System.out.println(round(-12.349,2,BigDecimal.ROUND_DOWN));//-12.34
//ROUND_CEILING
//如果数字>0 则和ROUND_UP作用一样
//如果数字<0 则和ROUND_DOWN作用一样
System.out.println(round(12.3401,2,BigDecimal.ROUND_CEILING));//12.35
System.out.println(round(-12.349,2,BigDecimal.ROUND_CEILING));//-12.34
//ROUND_FLOOR
//如果数字>0 则和ROUND_DOWN作用一样
//如果数字<0 则和ROUND_UP作用一样
System.out.println(round(12.349,2,BigDecimal.ROUND_FLOOR));//12.34
System.out.println(round(-12.3401,2,BigDecimal.ROUND_FLOOR));//-12.35
//ROUND_HALF_UP [这种方法最常用]
//如果第3位数字>=5,则第2位数字+1
//备注:只看第3位数字的值,不会考虑第3位之后的小数的
System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_UP));//12.35
System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_UP));//12.34
System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_UP));//-12.35
System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_UP));//-12.34
//ROUND_HALF_DOWN
//如果第3位数字>=5,则做ROUND_UP
//如果第3位数字<5,则做ROUND_DOWN
System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_DOWN));//12.35
System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_DOWN));//12.34
System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_DOWN));//-12.35
System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_DOWN));//-12.34
//ROUND_HALF_EVEN
//如果第3位是偶数,则做ROUND_HALF_DOWN
//如果第3位是奇数,则做ROUND_HALF_UP
System.out.println(round(12.346,2,BigDecimal.ROUND_HALF_EVEN));//12.35
System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_EVEN));//12.35希望对你有所帮助。