點燈坊

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

如何將 Float 取百分比並四捨五入到小數點第二位?

Sam Xiao's Avatar 2020-07-27

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 反轉

tofixed000

Conclusion

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

Reference

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