Ramda 並沒有提供四捨五入到小數點的 Function,但可藉由 invoker()
將 ECMAScript 原生的 toFixed()
從 Instance Method 轉成 Free Function。
Version
macOS Catalina 10.15.6
VS Code 1.47.2
Quokka 1.0.309
Ramda 0.27.0
invoker()
import { invoker, pipe, flip, concat, multiply } from 'ramda'
let toFixed = invoker(1, 'toFixed')
let toPercentage = pipe(
multiply(100),
toFixed(2),
flip(concat)('%')
)
toPercentage(0.994) // ?
第 3 行
let toFixed = invoker(1, 'toFixed')
Number.prototype.toFixed()
可將 Float 四捨五入到小數點第 n 位,但其為 instance method,特別使用 invoker()
將其轉成 free function。
第 5 行
let toPercentage = pipe(
multiply(100),
toFixed(2),
flip(concat)('%')
)
- **multiply()**:為了要取百分比,先乘以
100
- **toFixed()**:將 Float 四捨五入到小數點第
2
位 - **flip(concat)()**:將
%
加到最後,因此使用flip()
將concat()
的 argument 反轉
Conclusion
invoker()
可將 instance method 轉成 free function;而bind()
可將 static method 轉成 free function
Reference
Ramda, invoker()
Ramda, bind()
Ramda, multiply()
Ramda, flip()
Ramda, concat()