_setSettings(options, update = false) {
        // If the user used old options, we convert them to new ones
        if (update || !AutoNumericHelper.isNull(options)) {
            this.constructor._convertOldOptionsToNewOnes(options);
        }

        if (update) {
            // The settings are updated
            // Update the original data, if it has changed
            const decimalPlacesRawValueInOptions = 'decimalPlacesRawValue' in options;
            if (decimalPlacesRawValueInOptions) {
                this.settings.originalDecimalPlacesRawValue = options.decimalPlacesRawValue;
            }

            const decimalPlacesInOptions = 'decimalPlaces' in options;
            if (decimalPlacesInOptions) {
                this.settings.originalDecimalPlaces = options.decimalPlaces;
            }

            // Then update all the `decimalPlaces*` options
            this.constructor._calculateDecimalPlacesOnUpdate(options, this.settings);

            // Finally generate the updated settings object to use
            this._mergeSettings(options); //TODO Check that the `styleRules` option is correctly cloned (due to depth cloning limitation)
        } else {
            // The settings are generated for the first time
            this.settings = {};
            // If we couldn't grab any settings, create them from the default ones and combine them with the options passed as a parameter as well as with the HTML5 `data-*` info (via `this.domElement.dataset`), if any.
            this._mergeSettings(this.constructor.getDefaultConfig(), this.domElement.dataset, options, { rawValue : this.defaultRawValue });
            this.caretFix = false;
            this.throwInput = true; // Throw input event
            this.allowedTagList = AutoNumericEnum.allowedTagList;
            this.runOnce = false;
            this.hoveredWithAlt = false; // Keep tracks if the current AutoNumeric element is hovered by the mouse cursor while `Alt` is pressed
        }

        // Modify the user settings to make them 'exploitable'
        this._transformOptionsValuesToDefaultTypes();

        // Immediately run the callbacks that could update the settings object
        this._runCallbacksFoundInTheSettingsObject();

        // Improve the `negativePositiveSignPlacement` option if needed
        this.constructor._correctNegativePositiveSignPlacementOption(this.settings);

        // Set the `caretPositionOnFocus` and `selectOnFocus` options so that they do not conflict, if one of those have been set manually by the user.
        // If order to check that, we take a look at the original options the user passed as an argument, not `this.settings` that have been merged with the default settings. //TODO Check the validity of that comment
        this.constructor._correctCaretPositionOnFocusAndSelectOnFocusOptions(this.settings);

        // Define if the negative or positive signs are allowed
        this.constructor._setNegativePositiveSignPermissions(this.settings);

        // Calculate the number of decimal places (during the element initialization)
        if (!update) {
            // Make sure the `originalDecimalPlaces` info is set
            if (AutoNumericHelper.isNull(options) || !options.decimalPlaces) {
                this.settings.originalDecimalPlaces = null;
            } else {
                this.settings.originalDecimalPlaces = options.decimalPlaces;
            }

            // Save the `originalDecimalPlacesRawValue` info
            this.settings.originalDecimalPlacesRawValue = this.settings.decimalPlacesRawValue;

            // Then update all the `decimalPlaces*` options
            this.constructor._calculateDecimalPlacesOnInit(this.settings);
        }

        // Additional changes to the settings object
        this._calculateVMinAndVMaxIntegerSizes();
        this._setTrailingNegativeSignInfo();
        this.regex = {}; // Create the object that will store the regular expressions
        this.constructor._cachesUsualRegularExpressions(this.settings, this.regex);
        this.constructor._setBrackets(this.settings);
        this._calculateValuesToStringsKeys();

        // Validate the settings. Both tests throws if necessary.
        if (AutoNumericHelper.isEmptyObj(this.settings)) {
            AutoNumericHelper.throwError('Unable to set the settings, those are invalid ; an empty object was given.');
        }

        this.constructor.validate(this.settings, false, options);

        // Original settings saved for use when decimalPlacesShownOnFocus, divisorWhenUnfocused & showOnlyNumbersOnFocus options are being used
        this._keepAnOriginalSettingsCopy();
    }
Analyse the settings/options passed by the user, validate and clean them, then set them into `this.settings`.
Note: This sets the settings to `null` if somehow the settings objet is undefined or empty
      If only `decimalPlaces` is defined in the option, overwrite the other decimalPlaces* options, otherwise, use those options

@param {object} options
@param {boolean} update - If set to `true`, then the settings already exists and this function only updates them instead of recreating them from scratch
@throws