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

 更新时间:2021年12月10日 16:51:27   作者:科学之星  
这篇文章主要介绍了Java Float 保留小数位精度的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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显示为  .1
		DecimalFormat df2 = new DecimalFormat("0.00");//首位0显示出来,即0.1显示为 0.1
		System.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);
	} 
}

控制台输出:

截图如下:

----下面的是控制台输出-----(和上面一样的,怕图片丢失)

--------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
     * @exception        ArithmeticException 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 works
        String result = fastFormat(number);
        if (result != null)
            return result;
 
        return format(number, new StringBuffer(),
                      DontCareFieldPosition.INSTANCE).toString();
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 如何在Maven项目配置pom.xml指定JDK版本和编码

    如何在Maven项目配置pom.xml指定JDK版本和编码

    maven是个项目管理工具,如果我们不告诉它要使用什么样的jdk版本编译,它就会用maven-compiler-plugin默认的jdk版本来处理,这样就容易出现版本不匹配的问题,这篇文章主要给大家介绍了关于如何在Maven项目配置pom.xml指定JDK版本和编码的相关资料,需要的朋友可以参考下
    2024-01-01
  • Jmeter环境搭建及安装步骤

    Jmeter环境搭建及安装步骤

    Jmeter是纯Java开发的,能够运行Java程序的系统一般都可以运行Jmeter,本文以windows下安装步骤为例分步骤给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2021-12-12
  • Spring Mvc中传递参数方法之url/requestMapping详解

    Spring Mvc中传递参数方法之url/requestMapping详解

    在开发中,参数传递是必不可少的一个功能,下面这篇文章主要给大家介绍了关于Spring Mvc中传递参数方法之url/requestMapping的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • Spring前后端跨域请求设置代码实例

    Spring前后端跨域请求设置代码实例

    这篇文章主要介绍了Spring前后端跨域请求设置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java主流压缩解压工具对比、用法与选取详解

    Java主流压缩解压工具对比、用法与选取详解

    开发过程中可能会用到压缩文件的需求,下面这篇文章主要给大家介绍了关于Java主流压缩解压工具对比、用法与选取的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • idea2019.2安裝MybatisCodeHelper插件的超详细教程

    idea2019.2安裝MybatisCodeHelper插件的超详细教程

    这篇文章主要介绍了idea2019.2安裝MybatisCodeHelper插件的教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 简单了解Spring Cloud搭建Config过程实例

    简单了解Spring Cloud搭建Config过程实例

    这篇文章主要介绍了简单了解Spring Cloud搭建Config过程实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 详解Java Ajax jsonp 跨域请求

    详解Java Ajax jsonp 跨域请求

    本篇文章主要介绍了详解Java Ajax jsonp 跨域请求,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 到底如何设置Java线程池的大小的方法示例

    到底如何设置Java线程池的大小的方法示例

    在我们日常业务开发过程中,或多或少都会用到并发的功能。那么并发线程池到底设置多大呢?文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Spring Boot与RabbitMQ结合实现延迟队列的示例

    Spring Boot与RabbitMQ结合实现延迟队列的示例

    本篇文章主要介绍了Spring Boot与RabbitMQ结合实现延迟队列的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11

最新评论