點燈坊

失くすものさえない今が強くなるチャンスよ

如何將 Float 取百分比並四捨五入到整數 ?

Sam Xiao's Avatar 2020-07-27

Ramda 並沒有提供四捨五入到整數的 Function,但可藉由 bind() 將 ECMAScript 原生的 round() 從 Static Method 轉成 Free Function。

Version

macOS Catalina 10.15.6
VS Code 1.47.2
Quokka 1.0.309
Ramda 0.27.0

bind()

import { bind, pipe, flip, concat, multiply, toString } from 'ramda'

let round = bind(Math.round, Math)

let toPercentage = pipe(
  multiply(100),
  round,
  toString,
  flip(concat)('%')
)

toPercentage(0.994) // ?

第 3 行

let round = bind(Math.round, Math)

Math.round() 可將 Float 四捨五入到整數,但其為 static method,特別使用 bind() 將其轉成 free function。

第 5 行

let toPercentage = pipe(
  multiply(100),
  round,
  toString,
  flip(concat)('%')
)
  • **multiply()**:為了要取百分比,先乘以 100
  • **round()**:將 Float 四捨五入到整數
  • **toString()**:將 Number 轉型成 String
  • **flip(concat)()**:將 % 加到最後,因此使用 flip()concat() 的 argument 反轉

round000

Conclusion

  • bind() 可將 static method 轉成 free function;而 invoker() 可將 instance method 轉成 free function

Reference

Ramda, bind()
Ramda, multiply()
Ramda, toString()
Ramda, flip()
Ramda, concat()