1

if条件で変数を使用する際に問題が発生しました。私は3つの変数を持っています。1つは文字列型で、もう2つはJsonにあります。ここでsettings.DecimalDigitsの値は2または2より大きい値です。

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

integer&mantissaには、文字列としてcontrolValueに格納される特定の値があります。次に、 controlValueはIF条件で他の2つの変数(settings.MaxValueとsettings.MinValue )と比較されますが、タイプが文字列タイプであるため、条件を通過しません。

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

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

私の解析では、3つの変数すべてがフローティングタイプの3つの値を持ちます

controlValue=123.23または123.00settings.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 に答える