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






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

  • 相关阅读:
    char与unsigned char的区别
    C语言 —— sprintf()函数
    char *s 与 char s[ ]的区别
    打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )
    洛谷P2242 公路维修问题(Road)
    洛谷P1209 [USACO1.3]修理牛棚 Barn Repair
    洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication
    洛谷P2246 SAC#1
    Bzoj4300 绝世好题
    Uva1398 Meteor
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4774556.html
Copyright © 2020-2023  润新知