2015-09-10 6 views
-1

У меня есть эта функция, чтобы писать только цифры и разрешать только 1 запятую (точки автоматически преобразуются в запятые).Только Javascript. Как иметь 2 фиксированных десятичных знака?

Мне нужно, чтобы число было равно 2 десятичным и не более. Если человек пишет 12,345, 5 автоматически должен погаснуть.

Это функция:

function inputControl(input){ 

    if($('.max-value-overflow').is(':visible')){ 
     $('.max-value-overflow').hide(); 
    } 

    var value = input.val(); 
    var values = value.split(""); 
    var update = ""; 
    var transition = ""; 

     var expression=/(^\d+$)|(^\d+\.\d+$)|[,\.]/; 
     var finalExpression=/^([0-9][0-9]*[,\.]?\d{0,3})$/; 

    for(id in values) 
    {   
     if (expression.test(values[id])==true && values[id]!='') 
     { 
      transition+=''+values[id].replace('.',','); 
      if(finalExpression.test(transition)==true) 
      { 
       update+=''+values[id].replace('.',','); 
      } 
     } 
    } 
    input.val(update); 
} 

Я попытался изменить последнюю строку следующим образом:

input.val((update).toFixed(2)); 

Но не получилось. Я продолжаю получать номер полностью (12 345) вместо того, чтобы забрать последний номер.

+0

* «Но не сработало» * yey! : D Что именно? Какая ошибка? –

+0

В указанном вами номере (12,345) нет десятичной точки. Если 5 удаляется (как вы сказали), тогда значение будет полностью изменено. Это нормально? –

+0

Да @VimalanJayaGanesh Он должен стать 2 десятичным (но с запятой, а не точкой). –

ответ

0

update в вашем случае это строка. Попробуйте принуждение к ряду как

input.val((+update).toFixed(2)); 

или parseInt как

input.val(parseInt(update).toFixed(2)); 

Кроме того, обратите внимание, toFixed будет работать только для значений с десятичными знаками, а не запятые, так

(+'12,345').toFixed(2) => 'NaN' 
(+'12.345').toFixed(2) => '12.35' 
+0

downvoter хочет прокомментировать? – AmmarCSE

+0

Не работает (я не был нигде). –

+0

@ Mr.Web, помогите мне помочь. Что означает * не работает * означает? Есть ли сообщения об ошибках? Не работает ли 'toFixed' часть? – AmmarCSE

1

Это потому, что ваш вход - String, а .toFixed() работает только с числами. Вы должны проанализировать его с parseInt(), прежде чем использовать .replace('.',','), в противном случае вы получите строку снова, так как replace() возвращает строку

+0

Нет. Не работает. –

0

получил. Это была ошибка в регулярном выражении:

var finalExpression=/^([0-9][0-9]*[,\.]?\d{0,3})$/; 

Должно быть:

var finalExpression=/^([0-9][0-9]*[,\.]?\d{0,2})$/; 

(Обратите внимание на цифру 2 ближе к концу вместо 3.

0

Вот возможное решение:

Решение принято:

  • Разделить разделенную запятую числа в массив
  • Проверки и сделать последнее значение индекса 2 цифры
  • магазина значения обратно в массив
  • Преобразовать массив обратно запятую номер

function ConvertTo2Decimal(num) 
 
{ 
 
    var numArr = num.split(','); 
 

 
    if (numArr.length > 1) 
 
    { 
 
    var lastIndexValue = numArr[numArr.length - 1]; 
 
    
 
    if (lastIndexValue.length > 2) 
 
     { 
 
     lastIndexValue = lastIndexValue.substring(0, 2); 
 
     
 
     numArr[numArr.length - 1] = lastIndexValue;//set the new value 
 
     
 
     num = numArr.join(","); 
 
     } 
 
    } 
 
    
 
    return num; 
 
} 
 

 

 
document.write(ConvertTo2Decimal("12,345")); 
 
document.write("<br/>"); 
 
document.write(ConvertTo2Decimal("390,512,3455"));

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