मेरा MultiplyChk सत्यापन अच्छी तरह से काम करता है लेकिन जैसे ही मैं दशमलव बिंदु का उपयोग करता हूं यह काम करना बंद कर देता है। पहले उदाहरण पर सत्यापन काम करता है लेकिन दूसरे उदाहरण पर नहीं। दोनों चेक गुणन सत्यापन हैं। कृपया क्या कोई मेरी सहायता कर सकता है?

function formValidator() {
    var Two = document.getElementById('Two'); //Category
    var Total = document.getElementById('Total'); //Category
    var ExVAT = document.getElementById('ExVAT'); //exVAT
    var AmtPaid = document.getElementById('AmtPaid'); //AmtPaid

    if (MultiplyChk(Two, Total, "Total Amt must be double the first amount",
            "The first calculation is correct, click OK for 2nd calculation")) {
        if (isVAT(ExVAT, AmtPaid, "incorrect or validation not working correctly", "YES! Correct!")) {
            return true;
        }
    }
    return false;
}

function MultiplyChk(elem, elem2, helperMsg, correctMsg) {
    if ((elem2.value) == (elem.value * 2)) {
        alert(correctMsg);
        return true;
    } else {
        alert(helperMsg);
        elem.focus();
        return false;
    }
}

function isVAT(elem, elem2, helperMsg, correctMsg) {
    if ((elem2.value) == (elem.value * 1.14)) {
        alert(correctMsg);
        return true;

    } else {
        alert(helperMsg);
        elem.focus();
        return false;
    }
}
<form  action="alert('Correct!');"  onsubmit="return formValidator()" >
    This one works:<br>
    <input type="text" id="Two" name="Two" value="2"> *  2 =
    <input type="text" id="Total" name="Total" value="4">
    <br><br>
 
    but this validation does not work:<br><br>
    eg. R100 ex VAT = R114incl VAT<br>
    Ex VAT: <input type="text" id="ExVAT" size = 7 name="ExVAT" value="10">        <br>
    *1.14 = <br>
    AmtPaid: <input type="text" id="AmtPaid" name="AmtPaid" value="11.4">
    <br>
    <br>
    <input type="submit" value="Submit/Save"  onsubmit='return formValidator()'  style="width:300px;height:30px" />
</form>
2
Clark Superman 30 जुलाई 2017, 13:34

1 उत्तर

सबसे बढ़िया उत्तर

इसी तरह फ्लोटिंग पॉइंट नंबर काम करते हैं। वे सटीक नहीं हैं। तो आपको एक छोटी सी सहनशीलता की आवश्यकता है उदा .:

if(Math.abs(elem2.value-elem.value*2)<Number.EPSILON){

एप्सिलॉन के बारे में

या प्रत्यक्ष सहिष्णुता राशि का उपयोग करना:

 if(Math.abs(elem2.value-elem.value*2)<0.0001){

कार्रवाई में

1
Jonas Wilms 30 जुलाई 2017, 15:19
हम्म। जटिल लग रहा है। सिएट कोम्प्लीज़िएर्ट औस. क्या कोई समाधान है - शायद गोल करने का उपयोग कर रहे हैं? उत्तर सही होने की आवश्यकता नहीं है।
 – 
Clark Superman
30 जुलाई 2017, 14:14
सुपरमैन नाजा, सो कॉम्प्लिज़िएर्ट इस्त दास दोच गार निचट ...;), रुन्डेन वेरे ज़ू अनगेनौ जेड.बी: (0.3-0.2) वेर गेरुंडेट आच 0 ...
 – 
Jonas Wilms
30 जुलाई 2017, 14:24
क्या मुझे अब EPSILON नंबर को सूत्र में एकीकृत करना चाहिए ताकि यह काम करे?
 – 
Clark Superman
30 जुलाई 2017, 15:01