PHP float加減乗除

8636 ワード

phpの+-*/で浮動小数点数を計算すると、echo intval(0.58*100)などの計算結果が間違っている問題に遭遇する可能性があります.58ではなく57が印刷されます
これは実はコンピュータの下位のバイナリが浮動小数点数を正確に表すことができないバグで、言語にまたがっています.
精度関数ライブラリで問題を解決できます
  
bcadd-2つの高精度数値を加算
bccomp-2つの高精度数字を比較し、-1,0,1を返します.
bcdiv-2つの高精度デジタルを除去
bcmod-高精度の数字の余数を求めます
bcmul-2つの高精度デジタルを乗算
bcpow—高精度デジタル乗方を求める
bcpowmod-高精度のデジタル乗方を求めて型を求めて、数論の中でとてもよく使います
bcscale-デフォルトの小数点以下の桁数を設定します.Linux bcの「scale=」に相当します.
bcsqrt—高精度のデジタルの平方根を求めます
bcsub-2つの高精度数値を減算
 
 1 /**
 2   *         
 3   * 
 4   * @access global
 5   * @param float $left
 6   * @param float $right
 7   * @param int $scale          
 8   * 
 9   * @return int $left==$right    0 | $left$right    1
10   */
11 var_dump(bccomp($left=4.45, $right=5.54, 2));
12 // -1
13   
14  /**
15   *         
16   * 
17   * @access global
18   * @param float $left
19   * @param float $right
20   * @param int $scale          
21   * 
22   * @return string 
23   */
24 var_dump(bcadd($left=1.0321456, $right=0.0243456, 2));
25 //1.04
26  
27   /**
28   *         
29   * 
30   * @access global
31   * @param float $left
32   * @param float $right
33   * @param int $scale          
34   * 
35   * @return string 
36   */
37 var_dump(bcsub($left=1.0321456, $right=3.0123456, 2));
38 //-1.98
39   
40  /**
41   *         
42   * 
43   * @access global
44   * @param float $left
45   * @param float $right
46   * @param int $scale          
47   * 
48   * @return string 
49   */
50 var_dump(bcdiv($left=6, $right=5, 2));
51 //1.20
52  
53  /**
54   *         
55   * 
56   * @access global
57   * @param float $left
58   * @param float $right
59   * @param int $scale          
60   * 
61   * @return string 
62   */
63 var_dump(bcmul($left=3.1415926, $right=2.4569874566, 2));
64 //7.71
65  
66  /**
67   *   bc        
68   * 
69   * @access global
70   * @param int $scale          
71   * 
72   * @return void 
73   */ 
74 bcscale(3);
75 var_dump(bcdiv('105', '6.55957')); 
76 // 16.007

 
転載先:https://www.cnblogs.com/wangsh/p/5784032.html