2015-06-12 4 views
1

Мне нужна ваша помощь, конвертируя формат американского номера (1,000.00) в европейский (1.000,00) в код под названием Counter-Up from bfintal. (https://github.com/bfintal/Counter-Up). Мое преобразование целочисленной работы, просто число с плавающей точкой не подсчитывается. Heres код: Код: http://jsfiddle.net/ClaraCode/mwpvxwpp/1/Преобразование формата американского номера в европейский

Heres кодекс в сыром: HTML

<span class="count">12.000</span><br> 
<span class="count">1,20</span><br> 
<span class="count">1.000</span> 

JS:

(function($){ 
    "use strict"; 

    $.fn.counterUp = function(options) { 

    // Defaults 
    var settings = $.extend({ 
     'time': 400, 
    'delay': 10 
}, options); 

return this.each(function(){ 

    // Store the object 
    var $this = $(this); 
    var $settings = settings; 

    var counterUpper = function() { 
     var nums = []; 
     var divisions = $settings.time/$settings.delay; 
     var num = $this.text(); 
     var isComma = /[0-9]+.[0-9]+/.test(num); 
     num = num.replace(/\./g, ''); 
     var isInt = /^[0-9]+$/.test(num); 
     var isFloat = /^[0-9]+,[0-9]+$/.test(num); 
     var decimalPlaces = isFloat ? (num.split(',')[1] || []).length : 0; 

     // Generate list of incremental numbers to display 
     for (var i = divisions; i >= 1; i--) { 

      // Preserve as int if input was int 
      var newNum = parseInt(num/divisions * i); 

      // Preserve float if input was float 
      if (isFloat) { 
       newNum = parseFloat(num/divisions * i).toFixed(decimalPlaces); 
      } 

      // Preserve commas if input had commas 
      if (isComma) { 
       while (/(\d+)(\d{3})/.test(newNum.toString())) { 
        newNum = newNum.toString().replace(/(\d+)(\d{3})/, '$1'+'.'+'$2'); 
       } 
      } 

      nums.unshift(newNum); 
     } 

     $this.data('counterup-nums', nums); 
     $this.text('0'); 

     // Updates the number until we're done 
     var f = function() { 
      $this.text($this.data('counterup-nums').shift()); 
      if ($this.data('counterup-nums').length) { 
       setTimeout($this.data('counterup-func'), $settings.delay); 
      } else { 
       delete $this.data('counterup-nums'); 
       $this.data('counterup-nums', null); 
       $this.data('counterup-func', null); 
      } 
     }; 
     $this.data('counterup-func', f); 

     // Start the count up 
     setTimeout($this.data('counterup-func'), $settings.delay); 
    }; 

    // Perform counts when the element gets into view 
    $this.waypoint(counterUpper, { offset: '100%', triggerOnce: true }); 
}); 

    }; 

})(jQuery); 

Можете ли вы найти ошибку меня? Я провел полдня с поиском ... :( Спасибо

+1

Javascripts 'N Умбер' не помогает? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number – arkascha

+0

Разве вы не можете просто перевернуть их? например. 'output = input.replace (/[.,]/, function (c) {return c == ','? '.': ',';});' –

+0

Эй, я пробовал это, но он не работал в сочетании с прилавком. По целому числу я мог бы просто заменить «,» на «.». –

ответ

0

Я также предлагаю просто поменять местами, и
Для обработки поплавок просто сделать это строка первая:.

var floatInput = 1.01; 
var tmpInput = String(floatInput); 
tmpInput = tmpInput.replace(/,/, '♣') 
    .replace(/\./, ',') 
    .replace(/♣/, '.'); 

console.log(tmpInput); 
+0

Спасибо, но floatinput находится в формате с запятой: например, 1,01, а формат конца - в европейском формате с плавающей точкой, что означает 1,01. Проблема заключается в JS-кодексе, который ожидает американский формат (например, 1.01). Как и в моем jsfiddle. Я хочу, чтобы код мог обрабатывать входной поток с плавающей запятой и подсчитывать его с нуля до нужного номера –

+0

, поэтому запустите 'String (input) .test (/, /)', и если это правда, обрабатывайте европейский формат, если false , обрабатывать американский формат – Plato

0

привет я имеют те же проблемы, и я решил ее

  var counterUpper = function() { 
 

 
       var nums = []; 
 
       var divisions = $settings.time/$settings.delay; 
 
       var num = $this.text(); 
 
       var isComma = /[0-9]+,[0-9]+/.test(num); 
 
       num = num.replace(/,/g, '.'); //change this line 
 
       var isInt = /^[0-9]+$/.test(num); 
 
       var isFloat = /^[0-9]+\.[0-9]+$/.test(num); 
 
       var decimalPlaces = isFloat ? (num.split('.')[1] || []).length : 0; 
 

 
       var setCharAt = function(str, index, chr) { 
 
        debugger; 
 
        if (index > str.length - 1) return str; 
 
        return str.substr(0, index) + chr + str.substr(index + 1); 
 
       } 
 

 
       // Generate list of incremental numbers to display 
 
       for (var i = divisions; i >= 1; i--) { 
 

 
        // Preserve as int if input was int 
 
        var newNum = parseInt(num/divisions * i); 
 

 
        // Preserve float if input was float 
 
        if (isFloat) { 
 
        newNum = parseFloat(num/divisions * i).toFixed(decimalPlaces); 
 
        } 
 

 
        // Preserve commas if input had commas 
 
        if (isComma) { 
 
        debugger; 
 
        while (/(\d+)(\d{3})/.test(newNum.toString())) { 
 
         newNum = newNum.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2'); 
 

 
        } 
 
        newNum = newNum.replace('.', ','); 
 
        } 
 

 
        nums.unshift(newNum); //add this line to your code 
 
       }

Смежные вопросы