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

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);
  }
}

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

时间: 2024-10-12 12:37:38

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

java 四舍五入 保留两位小数

1. 格式化字符串 1 java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00"); 2 float val=Float.valueOf(df.format(6.6666666666)); 2.BigDecimal.setScale()方法 格式化小数点 1 BigDecimal bd=new BigDecimal(6.666666666666); 2 double val=bd.setScale(2,BigDec

WinCE的C#编程,对float型进行四舍五入保留两位小数,小数进行四舍五入操作,Math.Round的应用案例。

private  float ConvertFloat4Se5Ru(float flotValue) { int iValue = (int)Math.Round(flotValue * 10000); //小数点后两位前移,并四舍五入 flotValue = (float)(iValue / 10000.00f); return flotValue; } 申明:以上文字为"武汉汉码科技有限公司"原创,转载时务必注明出处. 技术分享,沟通你我,共同进步!www.hanma-scan.c

java,中双精度double控制保留两位小数,js控制两位小数

Java DecimalFormat dcmFmt = new DecimalFormat("0.00"); double db = 12333.353; System.out.println(dcmFmt.format(db)); JS <script type="text/javascript"> //保留两位小数 //功能:将浮点数四舍五入,取小数点后2位 function toDecimal(x) { var f = parseFloat(x);

BigDecimal四舍五入保留两位小数

import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class NumberFormatDemo { public static void main(String[] args) { // BigDecimal // 保留两位小数 System.out.println(new BigDecimal(0.2).setScale(2, BigDecimal

sql 四舍五入保留两位小数

select cast(362315*1.0/10000 as numeric(18,2)) select convert(decimal(18, 2), 362315 * 1.0 / 10000) 1. ROUND(该函数,只是负责四舍五入到两位小数,但是不负责截断 只留两位小数,例如下例:) 关于ROUND函数,我们平常理解为4舍5入,如: print ROUND(13.145, 2); 结果为:13.150 2. 使用转换类型,才能达到保留两位小数位的目的: select cast(13.

String转换成float并且保留两位小数,购物车计算价格

方法1: 用DecimalFormat 返回的是String格式的.该类对十进制进行全面的封装.像%号,千分位,小数精度.科学计算. float perPrice=Float.parseFloat(textView_price_shopCar.getText().toString()) * count;//String类型转换成float类型 DecimalFormat decimalFormat=new DecimalFormat(".00");//构造方法的字符格式这里如果小数不足

php保留两位小数并且四舍五入 保留两位小数并且不四舍五入

php保留两位小数并且四舍五入 $num = 5566.56831; echo sprintf("%.2f", $num); php保留两位小数并且不四舍五入 $num = 5566.56831; echo sprintf("%.2f",substr(sprintf("%.3f", $num), 0, -2)); php进一法取整 echo ceil(4.2); // 5 echo ceil(9.999); // 10 php舍去法取整 echo

java四舍五入(保留两位小数)

方式一:最简单的方法: float a = 123.4567f; // 这里的100就是2位小数点,如果要其它位,如4位,这里两个100改成10000 float b = (float)(Math.round(a*100))/100; 方式二: double f = 111231.5585; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); 方式

数字四舍五入保留两位小数

http://www.cnblogs.com/fanyong/archive/2013/05/30/chinese_round.html C#中的Math.Round()并不是使用的"四舍五入"法.其实在VB.VBScript.C#.J#.T-SQL中Round函数都是采用Banker's rounding(银行家算法),即:四舍六入五取偶.事实上这也是IEEE的规范,因此所有符合IEEE标准的语言都应该采用这样的算法. .NET 2.0 开始,Math.Round 方法提供了一个枚举