_setValueParts(left, right, isPaste = false) {
        const [normalizedLeft, normalizedRight, normalizedNewValue] = this._normalizeParts(left, right);
        const [minTest, maxTest] = AutoNumeric._checkIfInRangeWithOverrideOption(normalizedNewValue, this.settings);

        if (minTest && maxTest) {
            // First, set the raw value
            const roundedRawValue = AutoNumeric._truncateDecimalPlaces(normalizedNewValue, this.settings, isPaste, this.settings.decimalPlacesRawValue);
            const testValue = roundedRawValue.replace(this.settings.decimalCharacter, '.');

            if (testValue === '' || testValue === this.settings.negativeSignCharacter) {
                let valueToSetOnEmpty;
                switch (this.settings.emptyInputBehavior) {
                    case AutoNumeric.options.emptyInputBehavior.focus:
                    case AutoNumeric.options.emptyInputBehavior.press:
                    case AutoNumeric.options.emptyInputBehavior.always:
                        valueToSetOnEmpty = '';
                        break;
                    case AutoNumeric.options.emptyInputBehavior.min:
                        valueToSetOnEmpty = this.settings.minimumValue;
                        break;
                    case AutoNumeric.options.emptyInputBehavior.max:
                        valueToSetOnEmpty = this.settings.maximumValue;
                        break;
                    case AutoNumeric.options.emptyInputBehavior.zero:
                        valueToSetOnEmpty = '0';
                        break;
                    case AutoNumeric.options.emptyInputBehavior.null:
                        valueToSetOnEmpty = null;
                        break;
                    // When `emptyInputBehavior` is a number or a string representing a number
                    default:
                        valueToSetOnEmpty = this.settings.emptyInputBehavior;
                }

                this._setRawValue(valueToSetOnEmpty);
            } else {
                this._setRawValue(this._trimLeadingAndTrailingZeros(testValue));
            }

            // Then set the formatted value
            const roundedValueToShow = AutoNumeric._truncateDecimalPlaces(normalizedNewValue, this.settings, isPaste, this.settings.decimalPlacesShownOnFocus);
            let position = normalizedLeft.length;
            if (position > roundedValueToShow.length) {
                position = roundedValueToShow.length;
            }

            // Make sure when the user enter a '0' on the far left with a leading zero option set to 'deny', that the caret does not move since the input is dropped (fix issue #283)
            if (position === 1 && normalizedLeft === '0' && this.settings.leadingZero === AutoNumeric.options.leadingZero.deny) {
                // If the user enter `0`, then the caret is put on the right side of it (Fix issue #299)
                if (normalizedRight === '' || normalizedLeft === '0' && normalizedRight !== '') {
                    position = 1;
                } else {
                    position = 0;
                }
            }

            this._setElementValue(roundedValueToShow, false);
            this._setCaretPosition(position);

            return true;
        }

        this._triggerRangeEvents(minTest, maxTest);

        return false;
    }
Set the formatted element value as well as the `rawValue`.
This returns `true` if the element and raw value have been modified, `false` otherwise.
This method also adjust the caret position according to the `leadingZero` option and the normalized value. //TODO What about the cursor *selection*?

@param {string} left
@param {string} right
@param {boolean} isPaste
@returns {boolean}
@private