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つの高精度数値を減算
転載先:https://www.cnblogs.com/wangsh/p/5784032.html
これは実はコンピュータの下位のバイナリが浮動小数点数を正確に表すことができないバグで、言語にまたがっています.
精度関数ライブラリで問題を解決できます
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