玩了一些計算,發現了一些奇怪的東西。這是存盤在物件中的一些計算數字的轉儲。
["julianTime"]=>
float(0.92518518518519)
["julian"]=>
float(2459516.4251852)
["j2000"]=>
float(2021.8245727178)
["b1950"]=>
float(2021.8247835323)
["j1900"]=>
float(2021.8245727178)
["delta"]=>
float(72.316207312938)
["terrestrial"]=>
float(2459516.4251852)
["universal"]=>
float(2459516.4243482)
它似乎正在削減小數以適應特定長度。使用 JS 在同一臺機器上計算相同的數字,我得到這個:
"julianTime": 0.9251851851851852,
"julian": 2459516.4251851854,
"j2000": 2021.8245727178246,
"b1950": 2021.8247835323352,
"j1900": 2021.8245727178246,
"delta": 72.3162073129384,
"terrestrial": 2459516.4251851854,
"universal": 2459516.4243481923,
現在我知道我已經看到 php 和 js 用精度和 JSON 做了一些非常奇怪的事情。而我的 ini_set("precision", 14) 和 php 仍在砍掉小數位。
這是因為它被存盤在一個物件中???
uj5u.com熱心網友回復:
你的問題中有兩個重要的短語:
這里有一堆...
您所看到的是數字的字串表示,這些數字實際上以稱為“浮點”的復雜二進制格式存盤。
顯示的數字不是PHP 在內部用于計算更多值的數字。
我用過 ini_set("precision", 14)
如果您計算所示示例中的“有效數字”(在任何前導零之后),您將看到它們都正好是您要求的 14。
該設定的手冊頁說:
以浮點數顯示的有效位數。-1 表示將使用用于舍入此類數字的增強演算法。
因此,如果您嘗試ini_set("precision", -1),您可能會看到不同的結果。但是,它不會改變計算出的實際值,只會改變顯示。
計算中使用的實際精度是不可配置的,它是 PHP 的一部分,如果不先了解“浮點”的含義,就不容易理解。請參閱標題為“浮點數學是否已損壞? ”的參考問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/341632.html
