Skip to content

Commit

Permalink
Fix decimal (#96)
Browse files Browse the repository at this point in the history
* Fix up handling tenth decimals

For example, this corrects the printing of 0.5, 0.1, 2.5, and so on inside the input.

* Use exponentation operator where applicable

* Clean up decimal sanitization code.

* Don't redefine 'safeNumber'
  • Loading branch information
andrewfluck committed Jul 19, 2020
1 parent 3c2bcc8 commit d57c293
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,27 @@ const IntlCurrencyInput = ({
// to prevent a malformed config object
const safeConfig = useMemo(() => () => ({ ...defaultConfig, ...config }), [defaultConfig, config]);

const clean = (number) => {
if (typeof number === 'number') return number;
return Number(number.toString().replace(/[^0-9-]/g, ''));
}

const normalizeValue = number => {
const { formats: { number: { [currency]: { maximumFractionDigits: numDigits } } } } = safeConfig();
let safeNumber = number;


// all input numbers must be a float point (for the cents portion). This is a fallback in case of integer ones.
const safeNumber = Number.isInteger(number) ? Number(number) * 100 : number;
if (typeof number === 'string') {
safeNumber = clean(number);
if (safeNumber % 1 !== 0) safeNumber = safeNumber.toFixed(numDigits);
} else {
safeNumber = Number.isInteger(number) ? Number(number) * (10 ** numDigits) : number.toFixed(numDigits);
}

// strips everything that is not a number (positive or negative)
// then divide it by 10 power the maximum fraction digits.
return Number(safeNumber.toString().replace(/[^0-9-]/g, '')) / 10 ** numDigits;
return clean(safeNumber) / (10 ** numDigits);
};

const calculateValues = (inputFieldValue) => {
Expand Down

0 comments on commit d57c293

Please sign in to comment.