ceil, round, floor 関数
JavaScript の Math.ceil や Math.round などは小数点以下の任意の桁数を指定できない
簡単そうな方法は小数点以下 3 桁なら 1000 倍して関数通して 1000 で割る (1)
0.1234 なら 123.4 にして Math.ceil で 124 にしてから 0.124 に戻す
誤差があるのでこういう場合が出る
floor(0.29, 2)
// 0.28
0.29 * 100
// 28.999999999999996
1000 倍と 1000 で割った後に誤差補正のために文字列を経由する (2)
floor(0.29, 2)
// 0.29
桁が大きくなると補正の限界が来る
round(0.0499999999999999, 1)
// 0.1
number 型 (64bit float) の限界もある
0.9999999999999999
// 0.9999999999999999
0.99999999999999999
// 1
文字列として処理する (3)
文字列のままだと繰り上げ時の処理が扱いづらいの BigInt に任せる
実装が複雑になるのでマイナスの場合は対応してない
round("0.123456789012345678905", 20)
// '0.12345678901234567891'