文档章节

java基础入门-float四舍五入保留两位小数注意的地方

raylee2015
 raylee2015
发布于 2015/08/24 14:38
字数 560
阅读 8
收藏 0

float四舍五入保留两位小数注意的地方

最近在codewars做了一道非常简单的题目,但是它却花了我20来分钟,虽然最后解决了,但是中间发觉对于java的基础实在不行,回去要好好补一下

不说这么多,上题目:就是写一个方法,把英里每加仑换算成公里每升,保留两位数

一开始写的时候是没有问题,问题出现在保留两位数那里,我上一个测试代码


import java.util.regex.Pattern;

public class Test {
	/*
	 * 判断是否为整数
	 * 
	 * @param str 传入的字符串
	 * 
	 * @return 是整数返回true,否则返回false
	 */
	public static boolean isInteger(String str) {
		Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
		return pattern.matcher(str).matches();
	}

	public static void main(String[] args) {
		System.out.println(((Math.round(2.5555f * 100) / 100)));
		System.out.println(isInteger(((Math.round(2.5555f * 100) / 100))+""));
		System.out.println((float) ((Math.round(2.5555f * 100) / 100)));
		System.out.println((float) ((Math.round(2.5555f * 100f) / 100f)));
		System.out.println(((Math.round(2.5555f * 100) / 100.0)));
	}
}



输出结果:

2
true
2.0
2.56
2.56


做题目的时候我是使用第二句

从结果那里可以看见,其实是错误,需要的语句应该是第三第四句

这里需要指出一个比较特殊的地方,在除100那个地方,如果只是写100,其实最后是把输出的结果已经在后台转为是整形,

因此,在最后处理除以100这里,必须在100之后加上f或者.0表示最后需要转化成float


最后的地方,我贴出那道题目的几个答案,里面包括了好几种float四舍五入保留两位小数的方法,大家可以参考一下


public class Converter {
  public static float mpgToKPM(final float mpg) {
    return Math.round(mpg * 1.609344f / 4.54609188f * 100f) / 100f;
  }
}
import java.math.BigDecimal;
public class Converter {
  public static float mpgToKPM(final float mpg) {
    return BigDecimal.valueOf(mpg * 0.35400604353).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
  }
}
public class Converter {

  private static final float LITER = 4.54609188f;
  private static final float KILOMETER = 1.609344f;
  
  public static float mpgToKPM(final float mpg) {
    return Float.parseFloat(String.format("%.2f", mpg * KILOMETER / LITER ));
  }
}
import java.math.BigDecimal;

public class Converter {
  public static float mpgToKPM(final float mpg) {
    double a = (mpg * 1.609344 / 4.54609188);
    BigDecimal bi = new BigDecimal(String.valueOf(a));
    return (float)bi.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
  }
}
public class Converter {
  public static float mpgToKPM(final float mpg) {
    float result = (float) (mpg*1.609344/4.54609188);
    String s = String.format("%.2f", result);
    return Float.parseFloat(s);
  }
}






版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

raylee2015
粉丝 6
博文 265
码字总数 44224
作品 0
江门
私信 提问
怎么使float保留两位小数或多位小数

怎么使float保留两位小数或多位小数 两种方法: import java.math.*; …… 方法1: float f = 34.232323; BigDecimal b = new BigDecimal(f); float f1 = b.setScale(2, BigDecimal.ROUND_H......

IT_小翼
2013/01/16
1K
0
freemarker 数字格式化深入理解

一、使用内建函数c 特点: 不管其表现形式是怎样的(例如"123,456.123,456"、"123456.123456"、"000123456.123456000"、"123,456.123456"、"1,2345,6.123456"),只要小数分割符是'.'它就能转......

毛朱
2013/01/24
488
0
java 两个整数相除保留两位小数

java中,当两个整数相除时,由于小数点以后的数字会被截断,运算结果将为整数,此时若希望得到运算结果为浮点数,必须将两整数其一或是两者都强制转换为浮点数。 例如: (float)a/b // 将整数...

浮躁的码农
2015/09/06
27
0
Java和Python中的整数除法,取余,舍入

关于除法,你也许觉得没什么值得谈论的,毕竟小学的时候体育老师就教过我们了。然而对于编程中使用的除法,我觉得还是有很多值得注意的细节的。为什么我想深究一下?因为我日常主要使用Java和...

曾会玩
09/29
0
0
Java中BigDecimal的应用

我们来看一看java中BigDecimal的用法 public class MathUtil { // 加法 public static Double add(double a,double b,int scal) throws Exception{ BigDecimal add1 = conversionToBigDecima......

liangtee
2012/12/27
230
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
16
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部