- Discourse-Subscriptionsを使用しています
- 製品に価格プランを追加しようとしています
- 価格ボックスに19.99と入力します(入力の動作が非常に奇妙なため、これはすでに困難です)
- 送信を試みます
- エラー「無効な整数 1998.9999999999998」を受け取ります
これまでのところ、stable 3.5.3でのみテストしましたが、betaでもコードは同じです。
@computed("unit_amount")
get amountDollars() {
return parseFloat(this.get("unit_amount") / 100).toFixed(2);
}
set amountDollars(value) {
const decimal = parseFloat(value) * 100;
this.set("unit_amount", decimal);
}
Javascript / IEEE-754 floatの厄介な点:
-> parseFloat("19.99")*100
<- 1998.9999999999998
提案された修正: const decimal = Math.round(Number(value) * 100)
最大の疑問: なぜ誰も気づかなかったのか?誰も価格を19.99ドルに設定したことがなかったのでしょうか?