DecimalFormat格式化double类型的数字有误差

Mislhy 2015-02-26 04:59:03
DecimalFormat ff = new DecimalFormat("#.##");
System.out.println(ff.format(22.025)+"-----------");
System.out.println(ff.format(22.026)+"-----------");
System.out.println(ff.format(22.024)+"-----------");
我想用这种方式将数字保留两位小数,但是这个东西貌似一会四舍五入,一会又不?小弟java基础没有学好,求解释。。。。按道理前两个都是22.03,可是第一个和第二个的输出结果却不一样,java的JDK版本是1.6,myeclipse的版本是6.0.1。。。。。求大婶解释!!!
...全文
272 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackcoding 2015-02-27
  • 打赏
  • 举报
回复
public static void decimalForamt(){ DecimalFormat df = new DecimalFormat("#.##"); df.setRoundingMode(RoundingMode.HALF_UP); System.out.println(df.format(22.025)+"-----------"); System.out.println(df.format(22.026)+"-----------"); System.out.println(df.format(22.024)+"-----------"); } 有这个属性。
Mislhy 2015-02-27
  • 打赏
  • 举报
回复
2楼的,ff没有这属性。。。。如何破
番茄鲨鱼面 2015-02-27
  • 打赏
  • 举报
回复
也可以试一下下面这招,有点弱智的说……
DecimalFormat ff = new DecimalFormat("0.00");
		System.out.println(ff.format(22.025)+"-----------");
		System.out.println(ff.format(22.026)+"-----------");
		System.out.println(ff.format(22.024)+"-----------");
		System.out.println("我是风骚的java分割线");
		System.out.println(ff.format(22.019 + 0.000001)+"-----------");
		System.out.println(ff.format(22.020 + 0.000001)+"-----------");
		System.out.println(ff.format(22.021 + 0.000001)+"-----------");
		System.out.println(ff.format(22.024 + 0.000001)+"-----------");
		System.out.println(ff.format(22.025 + 0.000001)+"-----------");
		System.out.println(ff.format(22.026 + 0.000001)+"-----------");
		System.out.println(ff.format(22.028 + 0.000001)+"-----------");
		System.out.println(ff.format(22.029 + 0.000001)+"-----------");
		System.out.println(ff.format(22.030 + 0.000001)+"-----------");
番茄鲨鱼面 2015-02-27
  • 打赏
  • 举报
回复
引用 3 楼 Mislhy 的回复:
2楼的,ff没有这属性。。。。如何破
setRoundingMode从1.6版本开始,你的jdk支持,看一下环境变量配的是不是这个
番茄鲨鱼面 2015-02-27
  • 打赏
  • 举报
回复
引用 4 楼 u012017135 的回复:
public static void decimalForamt(){ DecimalFormat df = new DecimalFormat("#.##"); df.setRoundingMode(RoundingMode.HALF_UP); System.out.println(df.format(22.025)+"-----------"); System.out.println(df.format(22.026)+"-----------"); System.out.println(df.format(22.024)+"-----------"); } 有这个属性。
setRoundingMode从1.6版本开始。
Blue_Tear 2015-02-26
  • 打赏
  • 举报
回复
ff.setRoundingMode(RoundingMode.HALF_UP)
Mislhy 2015-02-26
  • 打赏
  • 举报
回复
自己先把自己顶起来!!!

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧