mirror of
https://github.com/we-promise/sure.git
synced 2026-04-08 14:54:49 +00:00
Fix French decimal separator handling in money input fields
Number.parseFloat() only recognizes dots as decimal separators, causing inputs like "256,54" (French locale) to be parsed as "256". Added a parseLocaleFloat utility that detects whether comma or dot is the decimal separator and normalizes accordingly before parsing. Fixes #1138 https://claude.ai/code/session_01ThfszjiCmbDDPyb4TZqk2X
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { Controller } from "@hotwired/stimulus"
|
||||
import parseLocaleFloat from "utils/parse_locale_float"
|
||||
|
||||
// Handles bidirectional conversion between total cost basis and per-share cost
|
||||
// in the manual cost basis entry form.
|
||||
@@ -9,7 +10,7 @@ export default class extends Controller {
|
||||
// Called when user types in the total cost basis field
|
||||
// Updates the per-share display and input to show the calculated value
|
||||
updatePerShare() {
|
||||
const total = Number.parseFloat(this.totalTarget.value) || 0
|
||||
const total = parseLocaleFloat(this.totalTarget.value)
|
||||
const qty = this.qtyValue || 1
|
||||
const perShare = qty > 0 ? (total / qty).toFixed(2) : "0.00"
|
||||
this.perShareValueTarget.textContent = perShare
|
||||
@@ -21,7 +22,7 @@ export default class extends Controller {
|
||||
// Called when user types in the per-share field
|
||||
// Updates the total cost basis field with the calculated value
|
||||
updateTotal() {
|
||||
const perShare = Number.parseFloat(this.perShareTarget.value) || 0
|
||||
const perShare = parseLocaleFloat(this.perShareTarget.value)
|
||||
const qty = this.qtyValue || 1
|
||||
const total = (perShare * qty).toFixed(2)
|
||||
this.totalTarget.value = total
|
||||
|
||||
Reference in New Issue
Block a user