1

我在 if 条件下使用变量时遇到问题。我有三个变量,其中一个是字符串类型,另外两个在 Json 中。这里 settings.DecimalDigits 的值为 2 或大于 2 的任何值。

var controlValue = integer + '.' + mantissa;
controlValue = parseFloat(controlValue).toFixed(settings.DecimalDigits);

整数和尾数将具有某个值,该值作为字符串存储在 controlValue 中。controlValue然后在 IF 条件下与其他两个变量(settings.MaxValue 和 settings.MinValue)进行比较,但它没有通过条件,因为它的类型是字符串类型

if (controlValue > settings.MaxValue)
                controlValue = settings.MaxValue;

            if (controlValue < settings.MinValue)
                controlValue = settings.MinValue;

在我的解析中,所有三个变量都将具有三个浮点类型的值

controlValue = 123.23 或 123.00
settings.MaxValue = 99.99
settings.MinValue = -99.99
请帮助解析通过IF 条件

4

2 回答 2

2

.toFixed()将您的号码变回字符串。如果你想让它再次变回一个数字,那么你需要在它上面使用 parseFloat 。可能有更好的方法可以做到这一点,但是在现有代码的基础上,您可以通过再次调用来创建controlValue一个可以在您的语句中使用的数字,如下所示:ifparseFloat()

var controlValue = integer + '.' + mantissa;
controlValue = parseFloat(parseFloat(controlValue).toFixed(settings.DecimalDigits));

仅供参考,将数字完全作为数字处理可能更有意义,而不是多次来回转换字符串:

var controlValue = parseFloat(integer + '.' + mantissa);
var filter = Math.pow(10, settings.DecimalDigits);
controlValue = Math.round(controlValue * filter) / filter;

或者甚至只是这个:

var controlValue = parseFloat(integer + '.' + mantissa.toString().substr(0, settings.DecimalDigits));
于 2012-11-08T05:21:07.493 回答
1

jfriend00 的回答帮助我解决了我的问题。解决方案如下:

            var controlValue = e.target.value; //get value from input
            controlValue = Number(controlValue); //Converting the string to number

            // Number format parses through if condition
            if (controlValue > settings.MaxValue)
                controlValue = Number(settings.MaxValue);
            if (controlValue < settings.MinValue)
                controlValue = Number(settings.MinValue);

            // if the value is having a mantissa 00. It will be rejected by Number() function. So next line its converted again to string format using .toFixed() function. 

            var controlValue = controlValue.toFixed(settings.DecimalDigits);

            // Splitting the value into two parts integer and mantissa 
            integer = controlValue.split('.')[0];
            if (typeof integer == 'undefined' || integer == null || integer == "" || isNaN(integer))
                integer = 0;

           // settings.DecimalDigits is the variable to set any default number of mantissa required to appear. 
            mantissa = controlValue.split('.')[1];
            if (typeof mantissa == 'undefined') {
                mantissa = "";
                for (i = 0; i < settings.DecimalDigits; i++)
                    mantissa += '0';
            }

            // Finally you have the result
            controlValue = integer + '.' + mantissa;
于 2012-11-09T06:51:23.727 回答