首页 > 编程语言 >JAVA之浮点数的比较

JAVA之浮点数的比较

时间:2024-01-30 15:14:17浏览次数:30  
标签:f1 f2 JAVA BigDecimal 0.1 浮点数 println 比较

一、浮点数比较概述

由于计算机内部浮点数精度的原因,使得本来应该相等的两个浮点数可能存在微小的误差,所以对于浮点数之间浮点数之间的等值判断,我们不能用==来进行比较。通常情况下,对于浮点数比较,我们通常指定一个误差范围,两个浮点数的差值在此范围之内,则认为是相等的。

二、JS浮点数的比较

var diff = 1e-5; // 定义精度精确到0.00001
var a = 0.1;
var b = 0.2;
var sum = 0.3;
// 判断相差小于精度就认为相等
if(Math.abs(a + b - sum) <= diff) {
    console.log('a + b == sum');
}
//或者使用JavaScript提供的最小精度值
if(Math.abs(a + b - sum)<= Number.EPSILON){
    console.log('a + b == sum');
}

三、JAVA浮点数的比较

3.1比较绝对值误差

final float THRESHOLD = 0.000001;   // 设置最大误差不超过0.000001
float f1 = 0.0f;
//对f1执行11次加0.1操作
for (int i = 0; i < 11; i++) {
    f1 += 0.1f;
}

float f2 = 0.1f * 11;

if (Math.abs(f1 - f2) < THRESHOLD) {
    System.out.println("f1 equals f2");
}

3.2BigDecimal

通过使用java.math包中提供的API类BigDecimal,使用它的compareTo()方法比较即可。

import java.math.BigDecimal;

public class Test
{
	public static void main(String[] args)
	{
		BigDecimal f1 = new BigDecimal("0.0");
		BigDecimal pointOne = new BigDecimal("0.1");
		for (int i = 0; i < 11; i++) {
			f1 = f1.add(pointOne);
		}

		BigDecimal f2 = new BigDecimal("0.1");
		BigDecimal eleven = new BigDecimal("11");
		f2 = f2.multiply(eleven);

		System.out.println("f1 = " + f1);
		System.out.println("f2 = " + f2);

		if (f1.compareTo(f2) == 0) {
			System.out.println("f1 and f2 are equal using BigDecimal");
		} else {
			System.out.println("f1 and f2 are not equal using BigDecimal");
		}
    }
}

参考链接:https://www.cnblogs.com/zhloong/p/java-float-number-compare.html

标签:f1,f2,JAVA,BigDecimal,0.1,浮点数,println,比较
From: https://www.cnblogs.com/Aying216/p/17996959

相关文章

  • (转)Java中equals和==、hashcode的区别
    https://www.cnblogs.com/lixuwu/p/5676207.htmlhttps://www.cnblogs.com/lixuwu/p/10662234.htmlhttps://timzhouyes.github.io/2020/02/27/Java%E7%89%B9%E7%A7%8D%E5%85%B5/https://blog.csdn.net/a745233700/article/details/83186808https://www.cnblogs.com/dolphin......
  • Java连接kubernates集群最优雅的两种方式
    创建maven工程,pom.xml中引入连接k8s的客户端jar包:<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><fabric.io.version>6.10.0</fabric.io.version></properties......
  • Java微服务框架开发
    Swagger常见问题:Swagger与高版本SpringBoot不兼容问题  分析源码查找问题解决springboot2.6和swagger冲突的四种方法解决方法:按如下配置修改策略,如仍然不需,需按照上述四种方法第四种添加Beanspring:mvc:path-match:matching-strategy:ant_p......
  • 初识Java
    Java特征和优势简单性面向对象可移植性高性能分布式动态性多线程安全性健壮性Java三大版本WriteOnce、RunAnywhereJavaSE:标准版(桌面程序,控制台开发...)JavaME:嵌入式开发(手机,小家电...)JavaEE:E企业级开发(Web端,服务器开发...)JDK、JRE、JVMJDK:JavaDevelopme......
  • 使用Java编写HTTP客户端和服务器:一场与网络的欢乐共舞
    你是否曾经想过,如果有一天你可以和网络对话,那会是怎样的场景?好消息,Java给了你这个机会!今天,我们要一起探讨如何使用Java编写HTTP客户端和服务器,让你和网络的互动变得更加有趣和欢乐。首先,我们需要了解HTTP是什么。简单来说,HTTP就是“超文本传输协议”,它就像是我们与网络交流的语言。......
  • 使用Java实现HTTPS通信:一场加密的探戈
    你知道吗,HTTPS不仅仅是一个简单的字母替换游戏,它是互联网安全的重要组成部分。好消息是,有了Java,我们也可以轻松地实现HTTPS通信!今天,就让我们一起跳进加密的探戈世界,了解如何使用Java实现HTTPS通信。首先,我们要明白HTTPS是什么。简单来说,HTTPS就是“超文本传输协议安全版”,它通过使......
  • 使用Java编写RESTful API:一场与HTTP的浪漫之舞
    下面是一个简单的示例,展示如何使用SpringBoot创建一个基本的RESTfulAPI:1. 创建一个新的SpringBoot项目。你可以使用SpringInitializr或任何你喜欢的IDE来创建项目。2. 3. 在pom.xml文件中添加SpringBootWebStarter依赖:4. xml复制代码<dependency> <groupId>org.springf......
  • Java实现基于清除后分配规则的垃圾回收器及其实现原理
    (Java实现基于清除后分配规则的垃圾回收器及其实现原理)实现基于清除后分配(mark-and-sweep)规则的垃圾回收器,可以按照以下步骤进行1.标记阶段(MarkingPhase)从根对象(如堆栈、全局变量)开始,递归地遍历所有可达的对象,并将其标记为活动对象,即不被回收的对象。这一过程可以使用深度优......
  • java运行时内存模型
    1.概述在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好。不过,也正是因为Java程序员把控制内存的权力交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟......
  • 使用Java处理HTTP状态码:一场代码与数字的奇妙之旅
    在互联网的世界里,HTTP状态码就如同交通信号灯,告诉我们请求是否成功,或者出了什么问题。当我们在Java中与Web服务器打交道时,了解这些状态码是必不可少的。今天,就让我们一起踏上这段代码与数字的奇妙之旅,看看如何使用Java来处理这些HTTP状态码。首先,我们要明白HTTP状态码的作用。简单......