当前位置: 首页 > 面试题库 >

Java中的浮点数和双精度数有多少个有效数字?

冯文彬
2023-03-14
问题内容

浮点数是否具有32个二进制数字,而双精度数是否具有64个二进制数字?该文档太难理解了。

所有位都转换为有效数字吗?还是小数点的位置占用了一些位?


问题答案:

float:32位(4个字节),其中23位用于尾数(约7个十进制数字)。指数使用8位,因此浮点数可以使用这8位将小数点“移动”到右边或左边。这样做避免了像0.0000003(3×10 -7)或3000000(3×10 7)那样在尾数中存储大量零。有1位用作符号位。

double:64位(8字节),其中52位用于尾数(约16个十进制数字)。指数使用11位,符号位使用1位。

由于我们使用的是二进制数(仅0和1),因此当数字非零时,尾数中的一位隐式为1(浮点和重复使用此技巧)。

另外,由于所有内容均为二进制(尾数和指数),因此通常无法精确转换为十进制数。像0.5、0.25、0.75、0.125这样的数字会被精确存储,但不会存储0.1。正如其他人所说,如果您需要精确存储美分,则不要使用float或double,而应使用int,long,BigInteger或BigDecimal。



 类似资料:
  • 我不明白为什么浮点值与双精度值不同。从下面的示例来看,对于相同的操作,float 提供的结果似乎与双精度型不同: 输出: 你能解释一下float和double之间的区别吗?

  • 问题内容: 以下值给我错误的精度。仅使用特定数字可以观察到它。这可能是一个浮动表示问题,但想知道具体原因。 正在打印的输出代替。 问题答案: 如果希望十进制数字与在Java中输入的数字完全一样,请使用BigDecimal而不是float。 浮点数对于十进制而言本质上是不准确的,因为许多以十进制结尾的数字(例如0.1)都是以二进制形式重复出现的数字,并且浮点数以二进制表示形式存储。

  • 问题内容: 如果我们运行以下代码: 它打印: 文字1.2345678990922222中的长尾将被忽略,但1.22222222222222222222中的长尾不会被忽略(变量d中的最后一个十进制数字变为3而不是2)。为什么? 问题答案: 打印a 或a 时看到的位数是Java的默认规则(从和转换为十进制)的结果。 Java的浮点数默认格式使用最少的有效十进制数字来将数字与附近的可表示数字区分开。1个

  • 问题内容: $a = ‘35’; $b = ‘-34.99’; echo ($a + $b); 结果为0.009999999999998 这是怎么回事?我想知道为什么我的程序不断报告奇怪的结果。 为什么PHP不返回预期的0.01? 问题答案: 因为浮点运算!=实数运算。对于一些浮子和,由不精确性引起的差异的说明是。这适用于使用浮点数的任何语言。 由于浮点数是具有有限精度的二进制数,因此存在有限数量

  • 本文向大家介绍Fortran 浮点数精度,包括了Fortran 浮点数精度的使用技巧和注意事项,需要的朋友参考一下 示例 类型的浮点数real不能有任何实数值。它们可以表示实数,最多可以包含一定数量的十进制数字。 FORTRAN 77保证了两种浮点类型,而最新的标准则至少保证了两种实数类型。实变量可以声明为 x这是默认类型的实数,并且y是比更大的十进制精度的实数x。在Fortran 2008中,十

  • 问题内容: 如果我有以下小数点数字: 然后我得到以下输出: 我想要的是: 问题答案: 可能令人困惑的部分是 的表示整个数(包括小数)的长度,而不仅仅是小数之前的部分。该代表的小数位数。 因此,要使格式正确无误,最多可以有小数点前4个数字和小数点后3个位,实际上是所需的格式。