[Scala]BigDecimalで四捨五入

今回のお題は
プログラムをやってて、ある程度数値をいじる方にはもう一般的な事かもしれませんが

四捨五入です。

Scalaで。

わかりやすいように例を挙げますと

画像サイズを比率を保ったまま縮小する処理を書いてみます。

 

このような感じで「widthAfter / widthBefore」で比率を求め、heightBeforeに掛け合わせて算出します。

これをそのまま実行するとheightAfter
339.9734395750332005312084993359895

というような、数値になってしまいます。

今回の想定では、340という整数が欲しかったので、小数点を四捨五入したいと思います。

これで340という数値が得られました。

このBigDecimalというクラスは、javaBigDecimalをラップしているようです。

使い方もほとんど同じですね。

ちなみに、
setScaleの一つ目の引数は四捨五入する位置で、0が小数点になります。
1を指定すれば、1.1のような、少数が一桁の数値になります。
二つ目の引数が、四捨五入、切り上げ、切り捨ての指定をします。
四捨五入の場合は
scala.math.BigDecimal.RoundingMode.HALF_UP
切り上げの場合は
scala.math.BigDecimal.RoundingMode.CEILING
切り捨ての場合は
scala.math.BigDecimal.RoundingMode.FLOOR

リバースプロキシで、アプリ側の再起動など

apacheでリバースプロキシを設定した場合

mod_proxyは接続先のサービスが落ちている場合、その状態をキャッシュしてしまうようです。

デフォルト値は60秒

なので、アプリを再起動した場合に、リバースプロキシでサービスが落ちている事を検知すると

60秒間、503が返る事となります。

この60秒を5秒とか1秒とかに設定してやる事で、503エラーの頻度が減ります。

設定の仕方は
[text]ProxyPass / http://localhost:3333/
ProxyPassReverse / http://localhost:3333/[/text]
としている所を
[text]ProxyPass / http://localhost:3333/ retry=5
ProxyPassReverse / http://localhost:3333/[/text]
とする事で設定できます。