fix the thousand and decimal ambiguity
This commit is contained in:
parent
ea0fee1b45
commit
0739fd2a5f
@ -19,14 +19,14 @@ function safelyApplyDecimalStyling(element) {
|
||||
// Mark as processed to avoid conflicts
|
||||
element.setAttribute('data-decimal-processed', 'true');
|
||||
|
||||
// Pattern for decimal numbers (including currency formats)
|
||||
// Improved patterns that properly distinguish thousands separators from decimal separators
|
||||
const patterns = [
|
||||
// Currency with Rp: Rp 6,210,000.00
|
||||
/^(.*Rp\s*)(\d{1,3}(?:[.,]\d{3})*)[.,](\d+)(.*)$/,
|
||||
// Standard decimal: 123.45, 1,234.56
|
||||
/^(.*)(\d{1,3}(?:[.,]\d{3})*)[.,](\d+)(.*)$/,
|
||||
// Simple decimal: 240.000
|
||||
/^(.*)(\d+)[.](\d+)(.*)$/
|
||||
// Currency with decimal: Rp 6,210,000.00 (comma for thousands, dot for decimal)
|
||||
/^(.*Rp\s*)(\d{1,3}(?:,\d{3})*)\.(\d{2})(.*)$/,
|
||||
// Standard decimal with thousands: 1,234.56 (comma for thousands, dot for decimal)
|
||||
/^(.*)(\d{1,3}(?:,\d{3})*)\.(\d+)(.*)$/,
|
||||
// Simple decimal without thousands: 240.000, 123.45
|
||||
/^(.*)(\d+)\.(\d+)(.*)$/
|
||||
];
|
||||
|
||||
for (const pattern of patterns) {
|
||||
@ -46,11 +46,13 @@ function safelyApplyDecimalStyling(element) {
|
||||
}
|
||||
|
||||
// Handle whole numbers in quantity contexts (be more selective)
|
||||
if (text.match(/^\d+$/) && text.length > 0 && (
|
||||
// Only add decimals to numbers that are clearly quantities, not prices with thousands separators
|
||||
if (text.match(/^\d+$/) && text.length > 0 && text.length <= 4 && (
|
||||
element.closest('[name="quantity"]') ||
|
||||
(element.closest('td') && element.closest('table') && text.length <= 6) // Only for reasonable quantities
|
||||
element.closest('[name="quantity_done"]') ||
|
||||
element.closest('[name="reserved_availability"]')
|
||||
)) {
|
||||
console.log('Safe Decimal Observer: Adding decimals to whole number', text);
|
||||
console.log('Safe Decimal Observer: Adding decimals to quantity', text);
|
||||
|
||||
// Double-check before updating
|
||||
if (element.textContent.trim() === text && document.contains(element)) {
|
||||
@ -59,6 +61,13 @@ function safelyApplyDecimalStyling(element) {
|
||||
}
|
||||
}
|
||||
|
||||
// Do NOT process numbers with commas that don't have decimal points
|
||||
// These are likely thousands separators (e.g., 8,500 should stay as 8,500)
|
||||
if (text.match(/^\d{1,3}(?:,\d{3})+$/) && !text.includes('.')) {
|
||||
console.log('Safe Decimal Observer: Skipping thousands separator number', text);
|
||||
return false;
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.warn('Safe decimal styling error (non-critical):', error);
|
||||
// Remove the processing flag if there was an error
|
||||
|
||||
Loading…
Reference in New Issue
Block a user