当你运行上述代码时,你可能会发现输出的double值并不是期望中的long值。这就是由于double的表示精度有限,导致了高位的整数位被舍弃或改变,从而出现了精度的丢失。 解决方法 对于重要的计算或需要保留准确值的场景,建议使用以下方法来避免精度丢失: 使用BigDecimal类:BigDecimal可以提供任意精度的计算,适用于财务计算或其他...
在使用 Java 中 double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏 0.0000**1。 先来看 Java 中 double 类型数值加、减、乘、除计算式实例: public class Test{ public static void main(String [] args){ System.out.println(0.06+0.01); System.out.println(1.0-0.42); System.out....
2.long可以准确存储19位数字,而double只能准备存储16位数字(实际测试,是17位,)。double由于有exp位,可以存16位以上的数字,但是需要以低位的不精确作为代价。如果一个大于17位的long型数字存到double上,就会丢失数字末尾的精度 3.如果需要高于19位数字的精确存储,则必须用BigInteger来保存,当然会牺牲一些性能。
1. double类型:double是浮点类型,用于表示双精度浮点数。它通常使用64位来存储数据,其中包括符号位、指数位和尾数位,允许表示很大或很小的数值,并且能够提供相对较高的精度。其最大值大约是1.79E+308。2. long类型:long是长整型,用于表示非常大的整数。它同样使用64位来存储数据,但只表示整数。
long:8 字节 64 位 浮点型: float:4 字节 32 位 double:8 字节 64 位 Java 运算时,当两个不同类型的数进行基本运算符操作时,低精度会自动向高精度转换,字节短的会自动向字节长的转换。 《Java 核心技术》一书中这么归纳到: 如果两个操作数其中有一个是 double 类型,另一个操作就会转换为 double 类型。
1) 整型类型:byte(字节型)、short(短整型)、int(整型)、long(长整型) 2) 浮点类型:float(单精度)、double(双精度) 3) 字符类型:char 4)布尔类型:boolean 针对基本类型,我们拿C/C++语言跟Java语言做个对比。C/C++支持无符号类型,而Java不支持无符号类型。除此之外,在C/C++中,基本类型的长度在不同编译器...
long是高于double精度的一个基础变量类型,你在这里的强行转换会产生精度缺失的问题。这个是我运行你的代码的结果,可以看出精度的缺失吧?long是一个长整形变量,而double是双精度的浮点数(其实就是小数)然后再这里b/1000就是等于12,因为b是长整形的,他的计算结果也会事长整形的 所以需要在计算前先...
long 64 8 0L -9223372036854775808(-2^63) ~ 9223372036854775807(2^63 -1) Long float (单精度) 32 4 0F -3.4E38(-3.410^38)~ 3.4E38(3.410^38) Float double (双精度) 64 8 0D -1.7E308(-1.710^308)~ 1.7E308(1.710^308) Double char 16 2 'u0000' 0 ~ 65536(2^32) Character boolean ...
然而,long类型在存储同样大的数值时,会尽可能地精确地表示,例如308个连续的1。这就意味着double能够表示的极大的数值可能会丢失部分精度,比如无法直接记录为308个1的形式。这种设计是为了在性能和精度之间找到一个平衡,对于大部分日常计算来说,这种省略是可接受的。但当需要精确记录每一个数字时,...