- fix for decimals in tables in appl form;

This commit is contained in:
Vitalii Kiiko
2025-07-04 10:33:22 +02:00
parent 34233465e9
commit f5bebc382e
7 changed files with 84 additions and 11 deletions

View File

@@ -0,0 +1,69 @@
export default function parseLocaleNumber(numberString) {
// Handle null, undefined, and empty values
if (numberString === null || numberString === undefined || numberString === '') {
return 0;
}
const str = String(numberString).trim();
if (str === '') {
return 0;
}
// Remove any currency symbols, letters, and other non-numeric characters
let cleaned = str.replace(/[^\d.,\-+]/g, '');
// Handle edge cases
if (cleaned === '' || cleaned === '-' || cleaned === '+') {
return 0;
}
// Count dots and commas
const dotCount = (cleaned.match(/\./g) || []).length;
const commaCount = (cleaned.match(/,/g) || []).length;
try {
// Determine format based on separators
if (dotCount === 0 && commaCount === 0) {
// Pure integer
const result = parseInt(cleaned, 10);
return isNaN(result) ? 0 : result;
}
else if (dotCount === 1 && commaCount === 0) {
// US format (123.45)
const result = parseFloat(cleaned);
return isNaN(result) ? 0 : result;
}
else if (dotCount === 0 && commaCount === 1) {
// Could be European (123,45) or US thousands (1,234)
const parts = cleaned.split(',');
if (parts.length === 2 && parts[1].length <= 2) {
// Likely decimal (123,45)
const result = parseFloat(cleaned.replace(',', '.'));
return isNaN(result) ? 0 : result;
} else {
// Likely thousands separator (1,234)
const result = parseFloat(cleaned.replace(',', ''));
return isNaN(result) ? 0 : result;
}
}
else {
// Mixed separators - use position to determine
const lastDot = cleaned.lastIndexOf('.');
const lastComma = cleaned.lastIndexOf(',');
if (lastDot > lastComma) {
// Dot is decimal separator (1,234.56)
cleaned = cleaned.replace(/,/g, '');
} else {
// Comma is decimal separator (1.234,56)
cleaned = cleaned.replace(/\./g, '').replace(',', '.');
}
const result = parseFloat(cleaned);
return isNaN(result) ? 0 : result;
}
} catch (error) {
return 0;
}
}