首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果这里的输出是“不相等的”,那么为什么用double而不是float不能给出相同的输出呢?

这个问题涉及到浮点数的精度问题。在计算机中,浮点数的表示是有限的,无法精确地表示所有的实数。float和double都是浮点数类型,但它们的精度不同。

float是单精度浮点数,占用4个字节,能够表示的有效位数大约是7位。而double是双精度浮点数,占用8个字节,能够表示的有效位数大约是15位。

由于浮点数的精度有限,当进行浮点数运算时,可能会出现舍入误差。这意味着即使两个浮点数在数学上是相等的,但在计算机中表示时可能会有微小的差异,导致比较结果为不相等。

因此,如果要求精度较高的计算,尤其是涉及到小数点后多位的计算,建议使用double类型而不是float类型。double类型的精度更高,能够提供更准确的计算结果。

在云计算领域中,如果需要进行精确的数值计算,例如金融领域的计算或科学计算,可以使用double类型来确保计算结果的准确性。

腾讯云提供了多种云计算服务,包括云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接地址可以根据具体需求进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

String类和常量池内存分析例子以及8种基本类型

如果不是用双引号声明 String 对象,可以使用 String 提供 intern 方法。...根据《java虚拟机规范 Java SE 8版》记录,如果某String实例所包含Unicode码点序列与CONSTANT——String_info结构所给出序列相同之前又曾在该实例上面调用过String.intern...(结论常量池有equals相同串或者引用指向equals相同串就不再缓存) 第六句,str3.intern(); 去检查一下常量池到底有没有”str01″?...检查发现常量池有个引用指向堆中”str01″,JVM认为常量池有”str01″那么直接返回指向堆中”str01″地址,很可惜,没有变量去接收,这一句在这里没有什么用。...、Double,其他基本类型包装类都有对应对象常量池缓存(就是cache数组缓存-128~127),FloatDouble不管自动还是手动装箱,一定不相等,里面都是调用构造new出来,比较2块堆内存

22920

第9条 覆盖equals时总要覆盖hashCode

(即equals相等,那么hashCode一定相等,需要注意,反过来不一定成立,即hashCode相等不代表equals相等) 如果两个对象根据equals方法比较不相等,那么调用这两个对象中任意一个对象...正如之前提到,hashCode其实主要用于跟基于散列集合合作 如HashMap会把相同hashCode对象放在同一个散列桶(hash bucket)中,那么即使equals相同hashCode...不相等,那么跟HashMap一起使用,则会得到与预期不相同结果....相同,即equals会为true System.out.println(className); } className多少?...那么问题来了,如何去重写hashCode?返回一个固定值?比如1?NO!!! So,how? EJ给出解决办法: 把某个非零常数值,比如17,保存在一个名为resultint类型变量中。

1.1K20
  • 《Java从入门到失业》第五章:继承与多态(5.8-5.10):多态与Object类

    这里需要注意一个问题,就是构造方法不能被重写,因为构造方法不能被继承。另外子类方法不能低于超类方法可见性。       ...这种在运行时能够自动选择调用哪个方法现象称为动态绑定(dynamic binding)。 5.8.3多态有什么用        我们了解了方法重写和动态绑定,那么多态有什么用?...例如对于String类来说,如果仅仅判断对象引用是否相等,那么“Java大失叔”和“Java大失叔”很有可能将不相等。更有意义判断可能两个对象状态完全一致(即所有属性值都一致)。...检测otherObj是否null,如果直接返回false。 比较this和otherObj是否属于同一个类;这里要仔细思考一下使用getClass方法还是instanceof。...如果对象x和y不同对象,那么x.hashCode()和y.hashCode()基本是不相同

    46640

    Java基础中面试题(一),你能接几招(附答案(不带答案面试题都是耍流氓))

    byte(1字节) , short(2字节) ,int(4字节), long(8字节),float(4字节) , double(8字节), boolean(1字节), char(2字节) 给出下列程序输出结果...小数默认类型double, 所以像18.5 和 12.3其实都是double类型, 把double类型赋值给float 有问题,因为有可能装不下。 所以第一种写法错误,第二种写法正确。...如果没有重写equals方法,那么调用时候相当于都是在调用父类Object中equals方法, Object类中equals就是使用 == 实现。==在连接基本数据类型时候,比较值。...equals: 判断对象是不是同一个对象。默认equals== 也就是比较地址值。我们可以重写equals方法。 两个方法都可以用来比较对象是否相同。...所以一般我们比较时候,一般先比较hashCode是否相等,如果hashCode不相等,说明肯定不是同一个对象,如果hashCode相等,也不能代表同一个对象,因为上面说了存在一些极端情况,所以在使用

    21010

    详解:Java重载方法与示例

    方法重载一项功能,如果一个类参数列表不同,则它允许一个类拥有多个具有相同名称方法。它类似于Java中构造函数重载,它允许一个类具有多个具有不同参数列表构造函数。...例如: add(int, float) add(float, int) 方法重载无效情况: 当我说参数列表时,我不是在说方法返回类型,例如,如果两个方法具有相同名称,相同参数并且具有不同返回类型...,那么不是有效方法重载示例。...第一种方法参数列表(char,int),第二种方法参数(int,char)。由于顺序不同,因此该方法可以重载不会出现任何问题。...有效重载情况。这里参数数量不同

    69510

    数字陷阱

    1、浮点数运算 先来看一个对浮点数作运算例子,请问会输出什么: System.out.println(4.015*100); 结果可能会让你大跌眼镜,不是401.5,而是401.49999999999994...,这就要涉及到浮点数一些知识点,Java中,浮点类型依据IEEE754标准,IEEE754定义了32位和64位双精度两种浮点二进制小数标准,采用二进制表示double,float浮点数不准确(...这个构造器BigDecimal(double val)结果不可预知这里,0.1无法准确地表示 double类型(一个有限长度二进制小数),传入到构造方法参数值并不完全等于 0.1。...,如果你研究过java中RoundingMode,你就会猜到它默认使用RoundingMode.HALF_EVEN,即如果舍弃部分左边数字奇数,则舍入行为同 RoundingMode.HALF_UP..."); } //a与b不相等 由于a,b指向不同实例,最后比较结果不相等,这和我们期望比较结果往往不同如果把赋值null,程序便会报错。

    78380

    为什么阿里巴巴禁止使用BigDecimalequals方法做等值比较?

    很多人都知道,在进行金额表示、金额计算等场景,不能使用doublefloat等类型,而是要使用对精度支持更好BigDecimal。... 到这里,我们大概解释清楚了,之所以equals比较bigDecimal4和bigDecimal5结果false,是因为精度不同。 那么,为什么精度不同?...为什么精度不同 这个就涉及到BigDecimal精度问题了,这个问题其实是比较复杂,由于不是本文重点,这里面就简单介绍一下吧。大家感兴趣的话,后面单独讲。...所以,当我们使用equals方法判断判断两个数是否相等时候,极其严格那么如果我们只想判断两个BigDecimal值是否相等,那么该如何判断?...但是,他equals方法使用时候需要谨慎,因为他在比较时候,不仅比较两个数字值,还会比较他们精度,只要这两个因素有一个不相等那么结果也是false、 如果读者想要对两个BigDecimal

    86130

    打破你认知,java,除以0一定会崩溃吗?

    System.out.println("1/0=" + 1/0); 大叔灵魂拷问: 上面的代码会崩溃吗?如果不会,会输出什么? 上面的代码会崩溃吗?如果不会,会输出什么? 上面的代码会崩溃吗?...如果不会,会输出什么? 会崩溃吗?如果不会,会输出什么? 会崩溃吗?如果不会,会输出什么输出日志: ? 为什么浮点数除以0不会崩溃?...我们先说结论: 因为javafloatdouble使用了 IEEE 754 标准。 这个标准规定:浮点数除以0等于正无穷或负无穷。 Double定义 于是我们打开Double这个类来看看。...注意关键词1: IEEE 754 java单精浮点数float和双精浮点数double,符合IEEE 754标准。...如果我们认知错误,任何数除以0都会崩溃,那么我们分析将会直接绕过真相去推理。于是得出结论,怎么可能有bug,不可能。 于是浪费了很多时间,去收集线索,去推翻我们固有的认知,才能找到真相。

    1.5K10

    Integer 128 == 128,true?

    如果不了解Integer特性,或许会认为输出结果:ture,然而实际上输出结果:false。 第2题....Java一种面向对象语言,Java中数据基本都是以对象形式存在,但是为了方便,Java提供了八种基本数据类型,它们分别是:int、byte、short、long、floatdouble、boolean...、char,这八种基本数据类型数据不是以对象形式存在,基本数据类型变量都是直接存储不是对象引用。...为了符合Java一种面向对象语言,Java分别为这八种数据类型提供了对应包装类型,分别为:Integer、Byte、Short、Long、FloatDouble、Boolean、Char。...第1题中,由于128不在-127~127之间,因而,a和b各自指向了new出新对象,那么a和b地址当然不相等了。有一点需要了解,通过new关键字实例化对象,对象地址一定是不同

    1K20

    程序员C语言快速上手——基础篇(二)

    以上表中,long类型有两种情况,使用32位编译器编译,则long4字节,占32位,如果使用64位编译器,则long8字节,占64位二进制。当然这个也不是绝对,仍然与系统环境有关。...基本数据类型打印 在第一个示例中,我们已经使用printf函数打印了hello world,这里print打印意思,那么f是什么意思?其实这里f缩写,format意思,代表格式化打印。...前面已经说过,在不同硬键平台上,不同编译器下,这些类型实际长度可能都有出入,那么如何才能确切指定当前某个数据类型实际长度到底是多少?...size = %d\n",sizeof(float)); 9 printf("double size = %d\n",sizeof(double)); 10 } 输出: 1 int size...常量 C语言中使用const关键字修饰就是常量,常量不能修改

    1K30

    完全合并C++面试题

    此时*p能够改动,p不能改动。 (4)const char * const p 这样地址及指向对象都不能改动。...从名称上也能够看出,c++比c多了+,说明c++c超集;那为什么不叫c+叫c++由于c++比 c来说扩充东西太多了,所以就在c后面放上两个+。...于是就成了c++ C语言结构化编程语言,C++面向对象编程语言。 C++側重于对象不是过程,側重于类设计不是逻辑设计。...參数其它。 以下举例说明。 int func(char s[5]); { cout<<sizeof(s);//这里输出4。本来s一个数组。...答: 101个先取出2堆, 33,33 第一次称,假设不相等,说明有一堆重或轻 那么把重那堆拿下来,再放另外35个中33 假设相等,说明假重,假设不相等,新放上去还是重的话,说明假轻(不可能新放上去

    36720

    002. java.lang.NumberFormatException: Infinite or NaN,怎么破?

    那么关键点来了:什么情况下一个double类型值会和POSITIVE_INFINITY/NEGATIVE_INFINITY常量相等?...); System.out.println(Double.isNaN(d)); } 运行后输出结果: false false -> d==d这个false哟 true 惊不惊喜,意不意外:...总结一下:浮点数除法计算,分母0且分子0,结果就是NaN。并且:每次计算NaN都永不相等。...Tips:NaN代表不是数字,因此“不是数字”和“不是数字”不相等,从逻辑上好像也说得通嘛 针对此异常补充说明 围绕POSITIVE_INFINITY、NEGATIVE_INFINITY、NaN三个常量进行一些补充说明吧...Float这三个常量和Double一样吗? 弱弱问一句:2023年了在实际业务开发中,不会真有人使用Float吧?吧?吧? 灵魂拷问:如果你使用了Float,收益是什么?是否真的值得?

    94041

    【CC++教学】浅谈指针函数和函数指针

    其函数原型:类型* 函数名(形式参数表) 如求两个值中最大值并返回其地址 ? 输出结果: 000000000065FE48 000000000065FE48 为什么两个地址值一样?...那么有了函数指针概念后,我们对函数调用除了用名字调用方式后,是不是还有别的方式? ? 运行结果: just test! just test! just test!...如int test1(int*,double )和int test2(int*,double)同一个类型函数,float test3(int , int)与test1和test2就不是相同类型函数...接下来我们介绍函数指针表示方式: 返回值类型 (*指针变量名)(形式参数类型) 因为函数指针指向某一类函数指针变量,所以也可以这么表示: 函数类型 *指针类型名 那么对于多个类型相同函数指针,...我们说了一大串,到底函数指针有什么用?笼统讲有两点 1.用函数指针调用函数 2.函数指针像普通指针一样作函数形式参数 千言万语不如一个例子实在。

    42020

    #Android单元测试学习总结「建议收藏」

    (String message, Object expected, Object actual) 断言两个对象相等,如果不相等则抛出异常携带指定message信息 assertEquals(float...,如果不相等则抛出异常携带指定message信息 assertEquals(double expected, double actual, double delta) 断言两个 double 类型 expect...,如果不相等则抛出异常携带指定message信息 fail() 直接让测试失败 fail(String message) 直接让测试失败并给出message错误信息 assertThat(T actual...那如果想做一些事不是doNothing,跟Mockito一样,采用doAnswer: @Test public void testStaticVoid() throws Exception...,这里需要注意如果你使用PowerMockito来mock系统静态final类,则gradle依赖中不能再添加单纯Mockito依赖库,否则这里不能mock成功,会提示Mockito can not

    5.1K20

    【C语言】操作符还能这样?

    ,先来分析一波: 此时,我们已经知道补码,如果编译器算术移位的话,将会打印出-1如果逻辑移位的话,将会打印出1,结果会是什么?...1才1,其他0 | 按位或——有1就是1 ^ 按位异或 ——相同为0,不同为1 注:操作数必须整数。...这里位:指的是二进制位,根据原、反、补码进行运算。 这些操作符有什么用?...测试一下就行了: 结果一样,与顺序无关。 好了,到了这里,我们在重新看一看刚开始题目:交换两个数,这时候是不是就更加理解了!...long double double float unsigned long int long int unsigned int int 如果某个操作数类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数类型后执行运算

    80830

    Java 中 ==, equals 与 hashCode 区别与联系

    要注意,浮点型和整型都是有符号类型(最高位仅用于表示正负,不参与计算【以 byte 例,其范围 -2^7 ~ 2^7 - 1,-0即-128】),char无符号类型(所有位均参与计算,所以...那么我们能不能综合两者特性,做出一种寻址容易,插入和删除也容易数据结构?...如果根据 equals(java.lang.Object) 方法,两个对象不相等那么对这两个对象中任一对象上调用 hashCode 方法 不要求 一定生成不同整数结果。...但是,程序员应该意识到,不相等对象生成不同整数结果可以提高哈希表性能。   ...那么, 这里就有一个比较严重问题:要想保证元素不重复,可两个元素是否重复应该依据什么来判断? 这就是 Object.equals 方法了。

    1.5K22

    java面试题基础篇 温故而知新 没事在地铁上多看看

    equals()方法Object类中方法,==运算符基本类型(如int、float等)方法。因此,如果要比较一个自定义对象与另一个自定义对象,应该使用equals()方法不是==运算符。...如果你需要在程序运行过程中频繁地修改字符串,那么使用StringBuilder或StringBuffer可能更合适。如果你只需要创建一个不可变字符串常量,那么使用String就足够了。...(强引用):指在程序中直接使用一个对象时所使用引用,如果该对象没有其他强引用指向它,那么它会被垃圾回收器回收。...代码重用:通过使用泛型,程序员可以将相同代码用于不同类型数据结构,从而提高代码复用性。 类型擦除:Java泛型实现了类型擦除,这意味着在运行时,实际使用原始类型,不是泛型类型。...hashcode 在Java中,如果两个对象hashCode()方法没有正确实现,那么它们可能会有相同hashCode值。

    70971

    小闫陪你入门 Java (四)

    ; } } } 首先定义了一个人月收入 5000~7000,那么根据上述程序会输出什么?看看吧: 哥们儿你生活美滋滋~ 借此我们来看一下语句如何运行。...然后这个变量会挨个与 case 后方值进行比较,直到相等(变量类型需相同,而且必须常量或者字面常量) 字母常量类型简单类型、String类型和空类型值在源程序中表现。...如果不相等那么输出 default 中语句。在每个 case 语句中如果遇到 break 会终止执行,否则继续比较,但是 default 分支不需要 break 语句。...官方封装这两个类并不是吃饱了撑,而是考虑到实际开发过程中,经常需要对象,所以为内置数据类型提供其包装类。它们有 Integer、Long、Byte、DoubleFloat 以及 Short。...它可以如同内置数据类型直接用来声明变量: Integer num = 10; 那么 Math 类? Math 类顾名思义,包含大量数学运算方法以及属性等。常见对数、三角函数等都有。

    38030

    (26) 剖析包装类 (上) 计算机程序思维逻辑

    包装类有什么用?Java中很多代码(比如后续文章介绍集合类)只能操作对象,为了能操作基本类型,需要使用其对应包装类,另外,包装类提供了很多有用方法,可以方便对数据操作。...new每次都会创建一个新对象,除了FloatDouble其他包装类,都会缓存包装类对象,减少需要创建对象次数,节省空间,提升性能,后续我们会分析其具体代码。...hashCode hashCode返回一个对象哈希值,哈希值一个int类型数,由对象中一般不变属性映射得来,用于快速对对象进行区分、分组等。一个对象哈希值不能变,相同对象哈希值必须一样。...不同对象哈希值一般应不同,但这不是必须,可以有不同对象但哈希值相同情况。...这是通过如下方式强制实现: 所有包装类都声明为了final,不能被继承 内部基本类型值私有的,且声明为了final 没有定义setter方法 为什么要定义不可变类

    555100
    领券