2018年回答
ここでの他の回答は、時代遅れであるか、良い例を示していません。CGFloat
Swift の組み込みrounded
関数を使用して a を丸めるのは簡単です。
let x: CGFloat = 3.5
let y = x.rounded() // 4.0
値をその場で丸めたい場合は、次を使用できますround
。
var x: CGFloat = 3.5
x.round() // 4.0
丸め規則
数値の丸め方をより正確に制御したい場合は、 を使用できますFloatingPointRoundingRule
。
x.rounded(.awayFromZero)
ゼロより大きい数値は切り上げられ、ゼロ未満の数値は切り捨てられます。
3.000 -> 3.0
3.001 -> 4.0
3.499 -> 4.0
3.500 -> 4.0
3.999 -> 4.0
-3.000 -> -3.0
-3.001 -> -4.0
-3.499 -> -4.0
-3.500 -> -4.0
-3.999 -> -4.0
x.rounded(.down)
小数値を含む数値を次に小さい整数に丸めます。これは と同じfloor(x)
です。
3.000 -> 3.0
3.001 -> 3.0
3.499 -> 3.0
3.500 -> 3.0
3.999 -> 3.0
-3.000 -> -3.0
-3.001 -> -4.0
-3.499 -> -4.0
-3.500 -> -4.0
-3.999 -> -4.0
x.rounded(.toNearestOrAwayFromZero) // same as x.rounded()
10 進数は、最も近い整数値に丸められます。ただし、値がちょうど真ん中にある場合 (3.5
またはのよう-3.5
に)、正の数は切り上げられ、負の数は切り捨てられます。
長くて複雑な名前を持っているかもしれませんが、これは通常、学校で丸めを学ぶ方法です。するだけのルールでもありますx.rounded()
。
3.000 -> 3.0
3.001 -> 3.0
3.499 -> 3.0
3.500 -> 4.0 ***
3.999 -> 4.0
-3.000 -> -3.0
-3.001 -> -3.0
-3.499 -> -3.0
-3.500 -> -4.0 ***
-3.999 -> -4.0
x.rounded(.toNearestOrEven)
これは に似ていますがtoNearestOrAwayFromZero
、.5
値が偶数の整数に丸められる点が異なります。
3.000 -> 3.0
3.001 -> 3.0
3.499 -> 3.0
3.500 -> 4.0 ***
3.999 -> 4.0
4.500 -> 4.0 ***
-3.000 -> -3.0
-3.001 -> -3.0
-3.499 -> -3.0
-3.500 -> -4.0 ***
-3.999 -> -4.0
-4.500 -> -4.0 ***
x.rounded(.towardZero)
これは、小数値を切り捨てる効果があります。が必要な場合Int
は、 で同じことを行うことができますInt(x)
。
3.000 -> 3.0
3.001 -> 3.0
3.499 -> 3.0
3.500 -> 3.0
3.999 -> 3.0
-3.000 -> -3.0
-3.001 -> -3.0
-3.499 -> -3.0
-3.500 -> -3.0
-3.999 -> -3.0
x.rounded(.up)
これは の反対です.down
。10 進数はすべて切り上げられます。これは と同じceil(x)
です。
3.000 -> 3.0
3.001 -> 4.0
3.499 -> 4.0
3.500 -> 4.0
3.999 -> 4.0
-3.000 -> -3.0
-3.001 -> -3.0
-3.499 -> -3.0
-3.500 -> -3.0
-3.999 -> -3.0
ノート
- 負の値を考慮することを忘れないでください。
round
との結果rounded
はまだCGFloat
です。が必要な場合Int
は、 のように変換する必要がありますInt(myCGFloat)
。
- C の数学関数を使用する必要は
round(x)
ありceil(x)
ませfloor(x)
ん。ただし、それらを使用する場合、64ビットと32ビットの両方のアーキテクチャを処理するため、 で見た可能性のある回答はすべてroundf
廃止ceilf
さfloorf
れています。