回答編集履歴
4
削除
test
CHANGED
@@ -109,5 +109,3 @@
|
|
109
109
|
4. 2で取得した数の0をsprintf()で0埋めするか、文字列として連結する。
|
110
110
|
|
111
111
|
|
112
|
-
|
113
|
-
もしくは、
|
3
修正
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
```
|
14
14
|
|
15
|
-
とすると、sprintf()に渡される前に n.999999という感じになっているはずです。
|
15
|
+
とすると、1少なくなる数を計算した場合、sprintf()に渡される前に n.999999という感じになっているはずです。
|
16
16
|
|
17
17
|
|
18
18
|
|
@@ -107,3 +107,7 @@
|
|
107
107
|
3. str_replaceで小数点を削除する
|
108
108
|
|
109
109
|
4. 2で取得した数の0をsprintf()で0埋めするか、文字列として連結する。
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
もしくは、
|
2
原因を追記
test
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
この現象はsprintfの仕様ではなく、小数を計算する際の誤差の問題です。
|
2
|
+
|
3
|
+
```PHP
|
4
|
+
|
5
|
+
$rentamount = str_replace("万円", "",$url2->rent_amount);//賃料
|
6
|
+
|
7
|
+
$tmp = $rentamount * 10000;
|
8
|
+
|
9
|
+
var_dump($tmp);
|
10
|
+
|
11
|
+
$rent_array[$j] = sprintf('%d',$tmp );
|
12
|
+
|
13
|
+
```
|
14
|
+
|
15
|
+
とすると、sprintf()に渡される前に n.999999という感じになっているはずです。
|
16
|
+
|
17
|
+
|
18
|
+
|
1
19
|
PHPに限らず、プログラム言語での小数計算は精度を指定しないと切り捨て問題が発生する可能性があります。
|
2
20
|
|
3
21
|
[PHP 小数計算 誤差](https://www.google.co.jp/search?q=BC+Math&oq=BC+Math&aqs=chrome..69i57j69i60&sourceid=chrome&ie=UTF-8#q=php+%E5%B0%8F%E6%95%B0%E8%A8%88%E7%AE%97+%E8%AA%A4%E5%B7%AE)
|
1
強調
test
CHANGED
@@ -70,7 +70,7 @@
|
|
70
70
|
|
71
71
|
```
|
72
72
|
|
73
|
-
という感じです。レンタルサーバ等でインストールされてないならこの方法は諦めるしかありません。
|
73
|
+
という感じです。**レンタルサーバ等でインストールされてないならこの方法は諦めるしかありません。**
|
74
74
|
|
75
75
|
|
76
76
|
|