Edited at

SwiftのFloat系の演算で余り演算子(%)が廃止、それに変わるメソッドはだるま落としと最寄駅

SwiftのFloat系の演算で、いつのまにか演算子の%が使えなくなりました。

機能が明確になったメソッドを代わりに使います。

そのまとめです。


truncatingRemainder メソッド

public func truncatingRemainder(dividingBy other: Self) -> Self

従来の%に変わるものです。どんどん削っていって最後に残ったものと解釈できます。だるま落とし方式です。

Darumaotoshi.png

Aの例 : 18.0を5.0で割った余りは3.0

Bの例 : 18.0を-5.0で割った余りは3.0

Cの例 : -18.0を5.0で割った余りは-3.0

Dの例 : -18.0を-5.0で割った余りは-3.0

実装と実行結果はこのようになります。

18.0.truncatingRemainder(dividingBy: 5.0)   //3.0

18.0.truncatingRemainder(dividingBy: -5.0) //3.0
-18.0.truncatingRemainder(dividingBy: 5.0) //-3.0
-18.0.truncatingRemainder(dividingBy: -5.0) //-3.0

【語句】truncate …の頭部[尾部]を切る


remainder メソッド

public func remainder(dividingBy rhs: Self) -> Self

もうひとつのメソッドが、remainderです。数直線上に、割る数の間隔で印をつけて、割られる数から一番近い印を見つける。その印から見た割る数の位置が余り。

最寄駅方式です。一番近い駅から目的地までの向きと距離、と解釈できます。

Moyorieki.png

赤丸が割られる数です。

Aの例 : 13.0を5.0で割った余りは-2.0

Bの例 : 12.0を5.0で割った余りは2.0

Cの例 : -13.0を5.0で割った余りは2.0

Dの例 : -12.0を5.0で割った余りは-2.0

実装と実行結果はこのようになります。

13.0.remainder(dividingBy: 5.0)     //-2.0

12.0.remainder(dividingBy: 5.0) //2.0
-13.0.remainder(dividingBy: 5.0) //2.0
-12.0.remainder(dividingBy: 5.0) //-2.0

割る数の正負が反対になっても最寄駅は変わりません。結果も同じです。

13.0.remainder(dividingBy: -5.0)    //-2.0

12.0.remainder(dividingBy: -5.0) //2.0
-13.0.remainder(dividingBy: -5.0) //2.0
-12.0.remainder(dividingBy: -5.0) //-2.0