@@ -47,4 +47,36 @@ public static function providerTruncArray(): array
47
47
'matrix ' => [[[3.14 , 3.141 ], [3.14159 , 3.14159265 ]], '3.1415926536 ' , '{2, 3; 5, 8} ' ],
48
48
];
49
49
}
50
+
51
+ public function testTooMuchPrecision (): void
52
+ {
53
+ // This test is pretty screwy. Possibly shouldn't even attempt it.
54
+ // At any rate, these results seem to indicate that PHP
55
+ // maximum precision is PHP_FLOAT_DIG - 1 digits, not PHP_FLOAT_DIG.
56
+ // If that changes, at least one of these tests will have to change.
57
+ $ sheet = $ this ->getSheet ();
58
+ $ sheet ->getCell ('E1 ' )->setValue (10.0 ** (PHP_FLOAT_DIG - 3 ) + 1.2 );
59
+ $ sheet ->getCell ('E2 ' )->setValue ('=TRUNC(E1,1) ' );
60
+ $ result = $ sheet ->getCell ('E2 ' )->getCalculatedValue ();
61
+ $ expectedResult = '1 ' . str_repeat ('0 ' , PHP_FLOAT_DIG - 4 ) . '1.2 ' ;
62
+ self ::assertSame ($ expectedResult , (string ) $ result );
63
+
64
+ $ sheet ->getCell ('F1 ' )->setValue (10.0 ** (PHP_FLOAT_DIG - 2 ) + 1.2 );
65
+ $ sheet ->getCell ('F2 ' )->setValue ('=TRUNC(F1,1) ' );
66
+ $ result = $ sheet ->getCell ('F2 ' )->getCalculatedValue ();
67
+ $ expectedResult = '1 ' . str_repeat ('0 ' , PHP_FLOAT_DIG - 3 ) . '1 ' ;
68
+ self ::assertSame ($ expectedResult , (string ) $ result );
69
+
70
+ $ sheet ->getCell ('G1 ' )->setValue (10.0 ** (PHP_FLOAT_DIG - 1 ) + 1.2 );
71
+ $ sheet ->getCell ('G2 ' )->setValue ('=TRUNC(G1,1) ' );
72
+ $ result = $ sheet ->getCell ('G2 ' )->getCalculatedValue ();
73
+ $ expectedResult = '1.0E+ ' . (PHP_FLOAT_DIG - 1 );
74
+ self ::assertSame ($ expectedResult , (string ) $ result );
75
+
76
+ $ sheet ->getCell ('H1 ' )->setValue (10.0 ** PHP_FLOAT_DIG + 1.2 );
77
+ $ sheet ->getCell ('H2 ' )->setValue ('=TRUNC(H1,1) ' );
78
+ $ result = $ sheet ->getCell ('H2 ' )->getCalculatedValue ();
79
+ $ expectedResult = '1.0E+ ' . PHP_FLOAT_DIG ;
80
+ self ::assertSame ($ expectedResult , (string ) $ result );
81
+ }
50
82
}
0 commit comments