Java|Java Float 保留小数位精度的实现

目录

  • Float 保留小数位精度
  • Float 浮点型数据保留两位小数
    • 1、DecimalFormat
    • 2、Math.round()

Float 保留小数位精度
DecimalFormat decimalFormat=new DecimalFormat(".00"); return Float.valueOf(super.getDecimalFormat().format(new BigDecimal(handleTime)));


Float 浮点型数据保留两位小数 用过两种方法:DecimalFormat和Math.round()。
用法:

1、DecimalFormat
String java.text.NumberFormat.format(double number)方法
float f = 0.5555f; DecimalFormat df1 = new DecimalFormat("#.00"); //保留两位小数,如果是零点几,则小数点前的0不显示,小数点后几个零就保留几位df1.format(f); #表示该位如果是0则不必显示出来,0则表示该位如果是0仍然显示;

函数的定义是:;
所以,传参是double,也可以传float(隐式转换),最后的结果是String类型。

2、Math.round()
int java.lang.Math.round(float a)方法
float f = 1.222f; f = Math.round(f * 100) / 100f; //乘以100,然后除以100转换为浮点类型/**乘以多少就保留多少位小数**注意Math.round()方法传float类型!*/

两种方法都会四舍五入。
如果是浮点类型建议用Math.round方法,也可以根据自己需求diy代码。
详细讲解请看代码注释和控制台输出:(包含decimalFloat的格式、Math.round函数的实现逻辑)
package testMap; import java.text.DecimalFormat; public class TestFloat { public static void main(String[] args) {// TODO Auto-generated method stub//四舍五入保留两位float f = 0.5555f; //decimalFormat是将double类型数据转换为字符串,并进行格式化//#表示这位如果是0则不必显示出来,0则表示这位如果是//format函数:String java.text.NumberFormat.format(double number)DecimalFormat df1 = new DecimalFormat("#.00"); //首位0不显示出来,即0.1显示为.1DecimalFormat df2 = new DecimalFormat("0.00"); //首位0显示出来,即0.1显示为 0.1System.out.println("--------DecimalFormat----------"); System.out.println("df1==" + df1.format(f)); System.out.println("df2==" + df2.format(f)); System.out.println(df1.format(f).getClass()); //String类型System.out.println(Float.parseFloat(df1.format(f))); //转换为float类型System.out.println(String.valueOf(df1.format(f))); //System.out.println(Float.toString(df1.format(f))); //转换为String类型f = 0.595f; //Math.round()方法是将浮点类型数据 乘以10的多少次方 ,取整,然后 + 0.5 除以10的多少次方,取小数点后多少位//如乘以1000 则取小数点后3位System.out.println("---------Math.round()----------"); System.out.println(Math.round(f * 100) / 100f); //四舍五入后如果末尾是0,自动省略,不显示//System.out.println(df1.format("1.2")); //参数必须是数值型String java.text.NumberFormat.format(double number)System.out.println(Float.toString(f)); //转换为String输出效果System.out.println(Float.toString(f)); //转换为String输出效果System.out.println("-----------Math.round()的正数非特殊值实现逻辑--------------"); f = 11.115111f; int b = (int) (f * 100 + 0.5); float a = b / 100f; System.out.println("a==" + a); System.out.println((int)(f * 100 + 0.5) / 100f); f = -12.115f; System.out.println("负数" + Math.round(f * 100) / 100f); f = -12.116f; System.out.println("负数" + Math.round(f * 100) / 100f); System.out.println("-------Math.round()的负数非特殊值实现逻辑--------"); int c = (int) (f * 100 - 0.5); float d = c / 100f; System.out.println("d==" + d); System.out.println((int)(d * 100 - 0.5) / 100f); } }

控制台输出:
截图如下:
Java|Java Float 保留小数位精度的实现
文章图片

----下面的是控制台输出-----(和上面一样的,怕图片丢失)
--------DecimalFormat----------
df1==.56
df2==0.56
class java.lang.String
0.56
.56
---------Math.round()----------
0.6
0.595
0.595
-----------Math.round()的正数非特殊值实现逻辑--------------
a==11.12
11.12
负数-12.11
负数-12.12
-------Math.round()的负数非特殊值实现逻辑--------
d==-12.12
-12.12
顺便贴上NumberFormat.formart()的代码:
/*** Specialization of format.** @param number the double number to format* @return the formatted String* @exceptionArithmeticException if rounding is needed with rounding*mode being set to RoundingMode.UNNECESSARY* @see java.text.Format#format*/public final String format(double number) {// Use fast-path for double result if that worksString result = fastFormat(number); if (result != null)return result; return format(number, new StringBuffer(),DontCareFieldPosition.INSTANCE).toString(); }

【Java|Java Float 保留小数位精度的实现】以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    推荐阅读