MW211 EXIT

devlog
C言語/小数点以下を四捨五入
2013年04月23日
「0.5」を足して、小数点以下を切り捨てる方式がオーソドックスか。
  ・0.4 → 0.9 → 0
  ・0.5 → 1.0 → 1
  ・0.6 → 1.0 → 1
負の数の場合は、反対になるので「0.5」を引いて小数点以下を切り捨てる。

double型を使う場合は、こんな感じ。これが基本。
┌──────────────────────────────────────┐
│if (被除数 < 0) {                                                           │
│    商 = (int)(((double)被除数 / 除数) - 0.5);                              │
│} else {                                                                    │
│    商 = (int)(((double)被除数 / 除数) + 0.5);                              │
│}                                                                           │
└──────────────────────────────────────┘

しかし、double型を使うと精度が落ちるので、使いたくないという場合には、
「10」を掛けて、「5」を足して(引いて)、「10」で割って、
小数点以下を切り捨てるという風にまわり道になる。
┌──────────────────────────────────────┐
│if (被除数 < 0) {                                                           │
│    商 = (int)((((被除数 * 10) / 除数) - 5) / 10);                          │
│} else {                                                                    │
│    商 = (int)((((被除数 * 10) / 除数) + 5) / 10);                          │
│}                                                                           │
└──────────────────────────────────────┘
順番を間違えて「(被除数 / 除数) * 10」としないように注意。
一度たりともダークゾーン(小数点以下)へ近づかないようにするのがポイント。
分類:C/C++