回答編集履歴

4

削除

2016/06/26 08:27

投稿

tanat
tanat

スコア18713

test CHANGED
@@ -109,5 +109,3 @@
109
109
  4. 2で取得した数の0をsprintf()で0埋めするか、文字列として連結する。
110
110
 
111
111
 
112
-
113
- もしくは、

3

修正

2016/06/26 08:27

投稿

tanat
tanat

スコア18713

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

原因を追記

2016/06/26 08:22

投稿

tanat
tanat

スコア18713

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

強調

2016/06/26 08:19

投稿

tanat
tanat

スコア18713

test CHANGED
@@ -70,7 +70,7 @@
70
70
 
71
71
  ```
72
72
 
73
- という感じです。レンタルサーバ等でインストールされてないならこの方法は諦めるしかありません。
73
+ という感じです。**レンタルサーバ等でインストールされてないならこの方法は諦めるしかありません。**
74
74
 
75
75
 
76
76