我在使用BCMath library在內部構建了一個在PHP中使用任意精度十進制數字的類。如何檢查帶有bcdiv()的分區是否會產生有限的結果?
當adding,subtracting或multiplying兩個數字時,可以預測所需的精度以確保不丟失任何數字。
但是,當涉及到division時,數字的數量可能是無限的,並且如果分割的結果不能表示爲有限的數字位數,我希望我的庫拋出異常。
如何在分割前知道結果是否是有限的,並在這種情況下計算結果的尺度?
我在使用BCMath library在內部構建了一個在PHP中使用任意精度十進制數字的類。如何檢查帶有bcdiv()的分區是否會產生有限的結果?
當adding,subtracting或multiplying兩個數字時,可以預測所需的精度以確保不丟失任何數字。
但是,當涉及到division時,數字的數量可能是無限的,並且如果分割的結果不能表示爲有限的數字位數,我希望我的庫拋出異常。
如何在分割前知道結果是否是有限的,並在這種情況下計算結果的尺度?
您需要執行%
(模數)操作...等待。哦,SH ...
實際上,如果不進行分工(或類似的步驟)本身,這是不可能的。
我可能會建議你創建一個divmod
函數,它將返回整數除法結果(即舍入)和餘數。並檢查餘數是否等於零。
還可以將任何rational number表示爲repeating decimal,如1/3 = 0.(3)
和1/7 = 0.(142857)
。不好的部分是週期長度可能高達這個數字的值,因此如果想用有理數進行精確計算,最好在內部表示數字爲n/m
。
減小的部分具有有限的十進制表示,如果分母唯一的質因子是2和5
使用bcmath時,我想你必須執行歐幾里德算法用於降低分數最低條款然後測試分母。這似乎不值得麻煩。