回答編集履歴

1

追記

2015/12/04 07:35

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -7,3 +7,47 @@
7
7
 
8
8
 
9
9
  それから、コードを書く時は、記入欄上部の`B I A ◯ □ " </>`の`</>`を押すと出てくる'''と'''の間に書くとスムーズですよ。
10
+
11
+
12
+
13
+ ---
14
+
15
+ 【追記】
16
+
17
+ 修正Good!!です。
18
+
19
+
20
+
21
+ 間違い箇所はT-T-T-T-T-T-T-Tさんの指摘通りと思います。
22
+
23
+ 修正は2つ案があります。
24
+
25
+ ```C
26
+
27
+ return i*((100.0+j)/100);
28
+
29
+ ```
30
+
31
+ T-T-T-T-T-T-T-Tさんの対策と考え方は同じです。
32
+
33
+ 100.0はdouble型になりますので、以降(100.0+j)もdouble型、((100.0+j)/100)もdouble型、更に i*((100.0+j)/100)もdouble型で計算され、最後にint型へ暗黙のキャストされることで切り捨てにて返却されます。
34
+
35
+
36
+
37
+ ```C
38
+
39
+ return (i*(100+j))/100;
40
+
41
+ ```
42
+
43
+ 貧弱な「マイコン」を使う時に良く使う手法です。整数演算だけで済みます。
44
+
45
+ 欠点はオーバーフローしないよう値に注意が必要なことです。
46
+
47
+ あまりに面倒なのでPC用なら使わない方がよいと思いますが。
48
+
49
+
50
+
51
+ 金額の場合はあり得ないと思いますが、もしも、iとして負の値を与えるような時は要注意です。負の数の四捨五入や切り捨ては、幾つかの方法がある(0に近い方に丸める、0から遠い方に丸めるなどなど)のでハマることが有ります。
52
+
53
+ そのような要らぬことに気を使わないでよいように、負の数があり得ないケースではint型ではなくunsigned型を使うと好ましいですよ。