NativeScript で adamwdraper/Numeral を使って toLocaleString
はじめに
NativeScript(NativeScript-Vue) で adamwdraper/Numeral を使って、toLocaleString
を実現する方法。
TL;DR
- NativeScript では
toLocaleString
は未対応(2020/05/09 現在) - adamwdraper/Numeral で独自フォーマッタを簡単に定義可能
numeral(val).format('')
目次
- はじめに
- TL;DR
- 環境・条件
- 詳細
- So that said, there is not much that can be done on the NativeScript side.. you could look for a custom formatter to handle this case.
- つまり、NativeScript側で実行できることはそれほど多くありません。このケースを処理するカスタムフォーマッタを探すことができます。
- まとめ
- 参考文献
環境・条件
1 | $ sw_vers |
詳細
問題: NativeScript は toLocaleString 未対応
NativeScript(NativeScript-Vue) で toLocaleString
を使った数値のフォーマッティングを行おうとしたところ、(現時点の) NativeScript では toLocaleString
が機能しなかった。
以下のように toLocaleString()
を使っても、1,234,567
とは表示されずにそのまま 1234567
とだけ表示される。
1 | <template> |
調べたところ、以下の Issue にて同様の内容が議論されている。
toLocaleString() doesn’t localise the number · Issue #8249 · NativeScript/NativeScript
NativeScript uses JavaScriptCore VM (for Android) which has a known issue with toLocalString.
So that said, there is not much that can be done on the NativeScript side.. you could look for a custom formatter to handle this case.
[Google 翻訳]
NativeScriptは、toLocalStringに関する既知の問題があるJavaScriptCore VM(Android用)を使用します。つまり、NativeScript側で実行できることはそれほど多くありません。このケースを処理するカスタムフォーマッタを探すことができます。
https://github.com/NativeScript/NativeScript/issues/8249#issuecomment-574653384 より引用
ざっくり言うと「JS 標準の toLocaleString()
は動作しないし、NativeScript 側でどうにかできる話でもないから別のフォーマッタ使ってね」という感じ。
解決方法: adamwdraper/Numeral を使う
自前で実装するのも面倒だったため、adamwdraper/Numeral を使って解決した。
セットアップ
1 | npm i numeral |
numeral の使用方法
参考: 公式ドキュメント
フォーマッティング
numeral(<value>).format('')
でフォーマッティング。
0,0
で 3桁区切りでの表示。
ただし、小数部がある場合は 切り上げ/切り捨て(おそらく四捨五入)された内容になる。
1 | const numeral = require('numeral'); |
ただし、小数部がある場合は 切り上げ/切り捨て(おそらく四捨五入)された内容になる。
1 | numeral(1234567.89).format('0,0'); |
小数部も表示したい場合は .0
, .00
, … を使う。
0,0.0
で 3桁区切り + 小数点第一位までの表示。
1 | numeral(1234567).format('0,0.0') |
必要な場合のみ小数部を表示するには [.]
を使う。
0,0[.]000
で 3桁区切り + 小数部がある場合のみ小数点第三位までの表示。
1 | numeral(1234567).format('0,0[.]000') |
numeral
への入力値が String
でも問題なし。(※この場合は主に後述の value
を取り出すのに使うと思うが)
1 | numeral('1234567').format('0,0'); |
他にも Currency, Bytes, Percentages, Time, Exponential などのフォーマット方法があるので、詳細は Format - 公式ドキュメント を参照。
デフォルト設定
defaultFormat()
で、フォーマット方法のデフォルト値を設定可能。
1 | numeral.defaultFormat('0,0[.]0'); |
値の取り出し
value()
で値を Number
として取り出し可能。
1 | numeral('1,234,567.89').value(); |
NativeScript(NativeScript-Vue) で使う
NativeScript-Vue で使う方法として、自分は mixin として登録して使うようにした。
app/mixins/ToLocaleString.js
1 | import * as numeral from "numeral"; |
app/main.js
1 | ... |
app/../xxxx.vue
1 | <template> |
まとめ
- NativeScript では
toLocaleString
は未対応(2020/05/09 現在) - adamwdraper/Numeral で独自フォーマッタを簡単に定義可能
numeral(val).format('')
参考文献
- toLocaleString() doesn’t localise the number · Issue #8249 · NativeScript/NativeScript
- Number.prototype.toLocaleString() - JavaScript | MDN
- adamwdraper/Numeral-js: A javascript library for formatting and manipulating numbers.
- Numeral.js
関連記事
- NativeScript, JsBarcode でバーコードを 生成/描画
- NativeScript でデバイスの輝度(明るさ)を制御する
- NativeScript で入力範囲外タップでキーボードを非表示にする
- NativeScript-Vue で次入力欄にフォーカスする方法
- NativeScript で Locale を意識した DatePicker/TimePicker
- NativeScript-Vue でページ読み込み後にページ移動やダイアログの表示
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア