打印a
float或a 时看到的位数
double是Java的默认规则(从
float和转换
double为十进制)的结果。
Java的浮点数默认格式使用最少的有效十进制数字来将数字与附近的可表示数字区分开。1个
在您的示例中,
1.2345678990922222f源文本中的
float值转换为值1.23456788063049316406406,因为在该
float类型可表示的所有值中,最接近的值是1.2345678990922222。下一个较低和下一个较高的值是1.23456776142120361328125和1.23456799983978271484375。
在打印此值时,Java只需要打印“
1.2345679”,因为这足以使我们可以
float从其邻居1.23456776142120361328125和1.23456799983978978271484375中选择值1.2345678806304931640625。
对于您的
double示例,
1.22222222222222222222d将转换为1.22222222222222232090871330001391470432281494140625。可代表的下一个较低和下一个较高的值
double是1.2222222222222220988641083749826066195964813232421875和1.2222222222222225429533182250452227890491485595703125。如您所见,为了将1.22222222222222232090871330001391470432281494140625与它的邻居区分开来,Java需要打印“
1.2222222222222223”。
脚注
1 Java SE
10的规则可以在该
toString(floatd)部分的java.lang.float文档中找到。该
double文档是相似的。段落中最相关的部分为粗体:
返回的字符串表示形式
float argument。下面提到的所有字符都是ASCII字符。
如果参数为NaN,则结果为字符串“ NaN”。
否则,结果是一个字符串,代表参数的符号和大小(绝对值)。如果符号为负,则结果的第一个字符为’
-‘('u002D');
如果符号为正,则结果中不显示符号字符。至于大小 m :
如果 m 为无穷大,则用字符“ Infinity”表示;因此,正无穷大产生结果“无穷大”,而负无穷大产生结果“-无穷大”。
如果 m 为零,则用字符“ 0.0”表示;因此,负零产生结果“ -0.0”,而正零产生结果“ 0.0”。
如果 m 大于或等于10 -3但小于10 7,则将其表示为 m 的整数部分,十进制形式,不带前导零,后跟’
.‘('u002E'),后跟一个或多个十进制数字表示 m 的分数部分。如果 m 小于10 -3或大于或等于10 7,则以所谓的“计算机科学计数法”表示。让 Ñ 是唯一的整数,使得10 Ñ ≤ 米
<10 Ñ 1 ; 然后让 一个 是的数学上精确的商数 米 和10 Ñ 使得1≤ 一个 然后<10的大小被表示为的整数部分 一个
,作为一个单一的十进制数字,后跟“.”('u002E'),其次是十进制数字表示的小数部分 一个
,后面跟有字母“E‘('u0045'),后跟 n 表示为十进制整数,由方法产生Integer.toString(int)。m 或 a 的小数部分必须打印多少个数字?
必须有至少一位数字来表示小数部分,并且除此以外,还需要与唯一数量不同的数字,以便将参数值与type的相邻值唯一区分开float。也就是说,假设
x 是此方法针对有限的非零参数 f 生成的十进制表示形式所表示的精确数学值。那么 f 必须是float最接近 x
的值;或者,如果两个float值相等地接近 x ,则 f 必须是其中之一,且 f 的最低有效位必须为0。



