public final class NumberToTextConverter
extends java.lang.Object
Double.toString(value) won't do.
- No more than 15 significant figures are output (java does 18).
- The sign char for the exponent is included even if positive
- Special values (NaN and Infinity) get rendered like the ordinary number that the bit pattern represents.
- Denormalised values (between ±2-1074 and ±2-1022 are displayed as "0"
IEEE 64-bit Double Rendering Comparison
Raw bits
Java
Excel
0x0000000000000000L
0.0
0
0x3FF0000000000000L
1.0
1
0x3FF00068DB8BAC71L
1.0001
1.0001
0x4087A00000000000L
756.0
756
0x401E3D70A3D70A3DL
7.56
7.56
0x405EDD3C07FB4C99L
123.45678901234568
123.456789012346
0x4132D687E3DF2180L
1234567.8901234567
1234567.89012346
0x3EE9E409302678BAL
1.2345678901234568E-5
1.23456789012346E-05
0x3F202E85BE180B74L
1.2345678901234567E-4
0.000123456789012346
0x3F543A272D9E0E51L
0.0012345678901234567
0.00123456789012346
0x3F8948B0F90591E6L
0.012345678901234568
0.0123456789012346
0x3EE9E409301B5A02L
1.23456789E-5
0.0000123456789
0x3E6E7D05BDABDE50L
5.6789012345E-8
0.000000056789012345
0x3E6E7D05BDAD407EL
5.67890123456E-8
5.67890123456E-08
0x3E6E7D06029F18BEL
5.678902E-8
0.00000005678902
0x2BCB5733CB32AE6EL
9.999999999999123E-98
9.99999999999912E-98
0x2B617F7D4ED8C59EL
1.0000000000001235E-99
1.0000000000001E-99
0x0036319916D67853L
1.2345678901234578E-307
1.2345678901235E-307
0x359DEE7A4AD4B81FL
2.0E-50
2E-50
0x41678C29DCD6E9E0L
1.2345678901234567E7
12345678.9012346
0x42A674E79C5FE523L
1.2345678901234568E13
12345678901234.6
0x42DC12218377DE6BL
1.2345678901234567E14
123456789012346
0x43118B54F22AEB03L
1.2345678901234568E15
1234567890123460
0x43E56A95319D63E1L
1.2345678901234567E19
12345678901234600000
0x441AC53A7E04BCDAL
1.2345678901234568E20
1.23456789012346E+20
0xC3E56A95319D63E1L
-1.2345678901234567E19
-12345678901234600000
0xC41AC53A7E04BCDAL
-1.2345678901234568E20
-1.23456789012346E+20
0x54820FE0BA17F46DL
1.2345678901234577E99
1.2345678901235E+99
0x54B693D8E89DF188L
1.2345678901234576E100
1.2345678901235E+100
0x4A611B0EC57E649AL
2.0E50
2E+50
0x7FEFFFFFFFFFFFFFL
1.7976931348623157E308
1.7976931348623E+308
0x0010000000000000L
2.2250738585072014E-308
2.2250738585072E-308
0x000FFFFFFFFFFFFFL
2.225073858507201E-308
0
0x0000000000000001L
4.9E-324
0
0x7FF0000000000000L
Infinity
1.7976931348623E+308
0xFFF0000000000000L
-Infinity
1.7976931348623E+308
0x441AC7A08EAD02F2L
1.234999999999999E20
1.235E+20
0x40FE26BFFFFFFFF9L
123499.9999999999
123500
0x3E4A857BFB2F2809L
1.234999999999999E-8
0.00000001235
0x3BCD291DEF868C89L
1.234999999999999E-20
1.235E-20
0x444B1AE4D6E2EF4FL
9.999999999999999E20
1E+21
0x412E847FFFFFFFFFL
999999.9999999999
1000000
0x3E45798EE2308C39L
9.999999999999999E-9
0.00000001
0x3C32725DD1D243ABL
9.999999999999999E-19
0.000000000000000001
0x3BFD83C94FB6D2ABL
9.999999999999999E-20
1E-19
0xC44B1AE4D6E2EF4FL
-9.999999999999999E20
-1E+21
0xC12E847FFFFFFFFFL
-999999.9999999999
-1000000
0xBE45798EE2308C39L
-9.999999999999999E-9
-0.00000001
0xBC32725DD1D243ABL
-9.999999999999999E-19
-0.000000000000000001
0xBBFD83C94FB6D2ABL
-9.999999999999999E-20
-1E-19
0xFFFF0420003C0000L
NaN
3.484840871308E+308
0x7FF8000000000000L
NaN
2.6965397022935E+308
0x7FFF0420003C0000L
NaN
3.484840871308E+308
0xFFF8000000000000L
NaN
2.6965397022935E+308
0xFFFF0AAAAAAAAAAAL
NaN
3.4877119413344E+308
0x7FF80AAAAAAAAAAAL
NaN
2.7012211948322E+308
0xFFFFFFFFFFFFFFFFL
NaN
3.5953862697246E+308
0x7FFFFFFFFFFFFFFFL
NaN
3.5953862697246E+308
0xFFF7FFFFFFFFFFFFL
NaN
2.6965397022935E+308
Note: Excel has inconsistent rules for the following numeric operations:
- Conversion to string (as handled here)
- Rendering numerical quantities in the cell grid.
- Conversion from text
- General arithmetic
Excel's text to number conversion is not a true inverse of this operation. The allowable ranges are different. Some numbers that don't correctly convert to text actually do get handled properly when used in arithmetic evaluations.
(Excel 将数字转换为具有与 java 不同规则的文本,因此 Double.toString(value) 不会这样做。输出不超过 15 个有效数字(java 为 18)。即使正的特殊值(NaN 和 Infinity)像位模式所代表的普通数字一样呈现,也包括指数的符号字符。去归一化值(±2-1074和±2-1022之间显示为 “0”,IEEE 64位双渲染比较原始比特的Java的Excel 0x0000000000000000L 0.0 0 1.0 0x3FF0000000000000L 1 0x3FF00068DB8BAC71L 1.0001 1.0001 0x4087A00000000000L 756.0 756 0x401E3D70A3D70A3DL 7.56 7.56 0x405EDD3C07FB4C99L 123.45678901234568 123.456789012346 0x4132D687E3DF2180L 1234567.8901234567 1234567.89012346 0x3EE9E409302678BAL 1.2345678901234568E -5- 1.23456789012346E-05 0x3F202E85BE180B74L 1.2345678901234567E -4- 0.000123456789012346 0x3F543A272D9E0E51L 0.0012345678901234567 0.00123456789012346 0x3F8948B0F90591E6L 0.012345678901234568 0.0123456789012346 0x3EE9E409301B5A02L 1.23456789E-5 0.0000123456789 0x3E6E7D05BDABDE50L 5.6789012345E-8 0.000000056789012345 0x3E6E7D05BDAD407EL 5.67890123456E -8- 5.67890123456E-08 0x3E6E7D06029F18BEL 5.678902E-8 0.00000005678902 0x2BCB5733CB32AE6EL 9.999999999999123E-98 9.99999999999912E-98 0x2B617F7D4ED8C59EL 1.0000000000001235E-99 1.0000000000001E-99 0x003631992346D67853L 1. 78901234578E-307 1.2345678901235E-307 0x359DEE7A4AD4B81FL 2.0E-50 2E-50 0x41678C29DCD6E9E0L 1.2345678901234567E7 12345678.9012346 0x42A674E79C5FE523L 1.2345678901234568E13 12345678901234.6 0x42DC12218377DE6BL 1.2345678901234567E14 123456789012346 0x43118B54F22AEB03L 1.2345678901234568E15 1234567890123460 0x43E56A95319D63E1L 1.2345678901234567E19 12345678901234600000 0x441AC53A7E04BCDAL 1.2345678901234568E20 1.23456789012346E + 20 0xC3E56A95319D63E1L -1.2345678901234567E19 -12345678901234600000 0xC41AC53A7E04BCDAL - 1.2345678901234568E20 -1.23456789012346E + 20 0x54820FE0BA17F46DL 1.2345678901234577E99 1.2345678901235E + 99 0x54B693D8E89DF188L 1.2345678901234576E100 1.2345678901235E + 100 0x4A611B0EC57E649AL 2.0E50 2E + 50 0x7FEFFFFFFFFFFFFFL 1.7976931348623157E308 1.7976931348623E + 308 0x0010000000000000L 2.2250738585072014E-308 2.2250738585072E-308 0x000FFFFFFFFFFFFFL 2.225073858507201E-308 0 0x0000000000000001L 4.9E-324 0 0x7FF0000000000000L 无穷大 1.7976931348623E+308 0xFFF0000000000000L -Inf inity这1.7976931348623E + 308 0x441AC7A08EAD02F2L 1.234999999999999E20 1.235E + 20 0x40FE26BFFFFFFFF9L 123499.9999999999 123500 0x3E4A857BFB2F2809L 1.234999999999999E-8 0.00000001235 0x3BCD291DEF868C89L 1.234999999999999E20 1.235E-20 0x444B1AE4D6E2EF4FL 9.999999999999999E20 1E + 21 0x412E847FFFFFFFFFL 999999.9999999999百万0x3E45798EE2308C39L 9.999999999999999E-9 0.00000001 0x3C32725DD1D243ABL 9.999999999999999E-19 0.000000000000000001 0x3BFD83C94FB6D2ABL 9.999999999999999E-20 1E-19 0xC44B1AE4D6E2EF4FL -9.999999999999999E20 -1E + 21 0xC12E847FFFFFFFFFL -999999.9999999999 -1000000 0xBE45798EE2308C39L -9.999999999999999E-9 -0.00000001 0xBC32725DD1D243ABL -9.999999999999999E-19 -0.000000000000000001 0xBBFD83C94FB6D2ABL -9.999999999999999E-20 -1E-19 0xFFFF0420003C0000L的NaN 3.484840871308E + 308 0x7FF8000000000000L的NaN 2.6965397022935E + 308 0x7FFF0420003C0000L的NaN 3.484840871308E + 308 0xFFF8000000000000L的NaN 2.6965397022935E + 308 0xFFFF0AAAAAAAAAAAL的NaN 3.4877119413344E + 308 0x7FF80AAAAAAAAAAAL的NaN 2注意:4701211948322CON + 308 0xFFFFFFFFFFFFFFFFFFFFL NAN 2.59538626997260 + 308 0x7FFFFFFFFFFFFFFFFFL NAN 2.69653970229350 + 308 0XFFFFFFFFFFFFFFFL NAN 2.69653970229352 + 308注意:Excel对以下数字操作具有不一致的规则:转换为字符串(此处处理)呈现单元格网格中的数值。从文本转换 一般算术 Excel 的文本到数字的转换并不是这个操作的真正逆操作。允许范围不同。一些不能正确转换为文本的数字在用于算术评估时确实得到了正确处理。)
-
Author:
-
Josh Micich
-
-
Method Summary
All Methods
Static Methods
Concrete Methods
Modifier and Type
Method and Description
static java.lang.String
toText(double value)
Converts the supplied
value to the text representation that Excel would give if the value were to appear in an unformatted cell, or as a literal number in a formula.
Note - the results from this method differ slightly from those of
Double.toString() In some special cases Excel behaves quite differently.
(如果值出现在未格式化的单元格中,或者作为公式中的文字数字,则将提供的值转换为 Excel 将给出的文本表示形式。注意 - 此方法的结果与 Double.toString() 的结果略有不同。在某些特殊情况下,Excel 的行为完全不同。)
-
-
Method Detail
-
toText
public static java.lang.String toText(double value)
Converts the supplied
value to the text representation that Excel would give if the value were to appear in an unformatted cell, or as a literal number in a formula.
Note - the results from this method differ slightly from those of
Double.toString() In some special cases Excel behaves quite differently. This function attempts to reproduce those results.
(如果值出现在未格式化的单元格中,或者作为公式中的文字数字,则将提供的值转换为 Excel 将给出的文本表示形式。注意 - 此方法的结果与 Double.toString() 的结果略有不同。在某些特殊情况下,Excel 的行为完全不同。此函数尝试重现这些结果。)
Copyright 2021 The Apache Software Foundation or its licensors, as applicable.