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