Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проблема с форматированием числа в калькуляторе (https://javascript.ru/forum/jquery/52569-problema-s-formatirovaniem-chisla-v-kalkulyatore.html)

Yu.Ka. 24.12.2014 17:44

Проблема с форматированием числа в калькуляторе
 
Собственно, есть такой скрипт:
$(function() {
        $( "#slider-range-max" ).slider({
            range: "max",
            min: 500000,
            max: 50000000,
            value: 50000,
            step: 500000,
            slide: function( event, ui ) {
                $( "#amount" ).val( ui.value );
                calc();
            }
        });
        $( "#amount" ).val( $( "#slider-range-max" ).slider( "value" ) );

    });

    $(function() {
        $( "#slider-range-max2" ).slider({
            range: "max",
            min: 6,
            max: 48,
            value: 12,
            slide: function( event, ui ) {
                $( "#amount2" ).val( ui.value );
                calc();
            }
        });
        $( "#amount2" ).val( $( "#slider-range-max2" ).slider( "value" ) );
    });

    function calc(par){
    amount = document.cl_form.amount.value;
    document.cl_form.amount.value = document.cl_form.amount.value.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ');
    amount2 = document.cl_form.amount2.value;
    //var summ;
    summ =  (Number(amount) + 0.01 * Number(amount) * Number(amount2))/Number(amount2);
    summ2 =  Number(amount) + 0.01 * Number(amount) * Number(amount2);
    summ = summ.toFixed(0);
    summ2 = summ2.toFixed(0);
    summ = summ.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ');
    summ2 = summ2.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ');
    document.cl_form.summ.value=summ;
    document.cl_form.summ.value=summ2;
    //document.getElementById("amounttd").innerHTML=amount;
    //document.getElementById("amount2td").innerHTML=amount2;
    document.getElementById("summ").innerHTML=summ;
    document.getElementById("summ2").innerHTML=summ2;
    return false; 
    }

Посмотреть в работе можно тут http://rezerv.yukastudio.ru/ - калькулятор расчета займа. Собственно, проблема в том, что он считает сумму, если двигать верхний ползунок, при передвижении нижнего в поле, где должно отображаться значение суммы, отображается NaN. Причем самое интересное, если убрать форматирование верхнего поля у первого ползунка

document.cl_form.amount.value = document.cl_form.amount.value.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ');


эта строка, все прекрасно работает.

Кто-нибудь в курсе, как решить эту проблему, или где я накосячил?

рони 24.12.2014 18:42

Yu.Ka.,
:cray:
$(function() {
    var range = [5E4, 12];
    $("#slider-range-max").slider({
        range: "max",
        min: 5E4,
        max: 5E6,
        value: 5E4,
        step: 5E4,
        slide: function(event, ui) {
            $("#amount").val(("" + ui.value).replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, "$1 "));
            range[0] = +ui.value;
            calc()
        },
        change: function(event, ui) {
            $("#amount").val(("" + ui.value).replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, "$1 "));
            range[0] = +ui.value;
            calc()
        }
    });
    $("#slider-range-max2").slider({
        range: "max",
        min: 6,
        max: 48,
        value: 12,
        slide: function(event, ui) {
            $("#amount2").val(ui.value);
            range[1] = +ui.value;
            calc()
        },
        change: function(event, ui) {
            $("#amount2").val(ui.value);
            range[1] = +ui.value;
            calc()
        }
    });
    $("#slider-range-max").slider("option", "value", 5E4);
    $("#slider-range-max2").slider("option", "value", 12);

    function calc(par) {
        var summ = (range[0] + .01 * range[0] * range[1]) / range[1],
            summ2 = range[0] + .01 * range[0] * range[1];
        summ = summ.toFixed(0);
        summ2 = summ2.toFixed(0);
        summ = summ.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, "$1 ");
        summ2 = summ2.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, "$1 ");
        document.getElementById("summ").innerHTML = summ;
        document.getElementById("summ2").innerHTML = summ2;
        return false
    }
});

Yu.Ka. 24.12.2014 19:02

Огромнейшее пасибище
 
Огромнейшее спасибо!!!

Yu.Ka. 24.12.2014 19:05

Еще такой вопрос, если честно, нигде не встречал такого, вот хочу поинтересоваться, реально ли это вообще, что бы миллионы, писались не так 1 000 000 а так 1 млн.

рони 24.12.2014 19:15

Yu.Ka.,
самое простое
summ2 = summ2.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, "$1 ").replace(/000 000$/, "млн.");

Yu.Ka. 24.12.2014 19:23

Не так не хотит почему то ;)

рони 24.12.2014 19:35

Yu.Ka.,
alert("7000000".replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, "$1 ").replace(/000 000$/, "млн."))

Yu.Ka. 24.12.2014 19:38

Да понял уже, что он только нули режет, теперь думаю, как туда весь диапазон влепить от 000 000 до 999 999 ))

рони 24.12.2014 19:45

Yu.Ka.,
так ?
summ2.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, "$1 ").replace(/(\d{3} \d{3})$/, "млн. $1");

Yu.Ka. 24.12.2014 19:56

Спасибо, усе получилось ;)


Часовой пояс GMT +3, время: 03:57.