关于Java小数点位数保留的解决方案

发表于:2016-10-13 09:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:RaphetS    来源:51Testing软件测试网采编

  第一种方法-使用DecimalFormat类
  举个例子,假如我们需要保留两位小数,我们可以这样写
  DecimalFormat df = new DecimalFormat("0.00");
  测试如下:
  double d = 0.200;
  DecimalFormat df = new DecimalFormat("0.00");
  System.out.println(df.format(d));
  输出结果为:
  0.20
  若double d=0.000;输出结果为0.00;
  若double d=0;输出结果为0.00;
  若double d=41.2345;输出结果为41.23;
  经测试,不管double d的值为多少,最后结果都是正常的两位小数。
  同理若是保留一位小数DecimalFormat df = new DecimalFormat("0.0");其他以此类推
  若是这种写法DecimalFormat df = new DecimalFormat("0.00"),不管传入的任何值,均保留两位小数
  还有一种写法是这样:
  double d = 41.123;
  DecimalFormat df = new DecimalFormat("#.##");
  System.out.println(df.format(d));
  输出结果为:
  41.12
  若double d=2.00,输出结果为2;
  若double d=41.001,输出结果为41;
  若double d=41.010,输出结果为41.01;
  若double d=0,输出结果为0;
  若double d=0.200,输出结果为0.2;
  总结:若是这种写法DecimalFormat df = new DecimalFormat("#.##"),则保留小数点后面不为0的两位小数,这种写法不能保证保留2为小数,但能保证最后一位数不为0;
  第二中方法
  测试:
  double d = 0.6544;
  String s=String.format("%.2f",d);
  System.out.println(s);
  输出结果为:
  0.65
  若double d=0.6566,输出结果为0.66;
  若double d=0,输出结果为0.00;
  其中String s=String.format("%.2f",d)表示小数点后任意两位小数,其中2为表示两位小数,若需要三位小数,把2改为3即可,其他同理。
  总结:这种方法不管传入的值是多少,均保留两位小数,并且符合四舍五入的规则。
  第三种方法-使用BigDecimal类
  测试:
  double d = 1.000;
  BigDecimal bd=new BigDecimal(d);
  double d1=bd.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
  System.out.println(d1);
  输入结果:1.0
  若double d=0,输出结果为0.0;
  若double d=1.999,输出结果为2.0;
  若double d=1.89,输出结果为1.89;
  总结:使用这种写法若小数点后均为零,则保留一位小数,并且有四舍五入的规则。
  源码
  以下为Java测试类
import java.math.BigDecimal;
import java.text.DecimalFormat;
public class Test {
public static void main(String[] args) {
double d = 1.19;
System.out.println(formatDecimal4(d));
}
public static String formatDecimal1(double d) {
DecimalFormat df = new DecimalFormat("0.00");
return df.format(d);
}
public static String formatDecimal2(double d) {
DecimalFormat df = new DecimalFormat("#.##");
return df.format(d);
}
public static String formatDecimal3(double d){
return String.format("%.2f",d);
}
public static double formatDecimal4(double d){
BigDecimal bd=new BigDecimal(d);
double d1=bd.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
return d1;
}
}
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号