2013-05-22 3 views
0

Il existe un tableau des enregistrements, où les colonnes sont 12 mois + résumé. J'ai une action jQuery simple qui onChange du nombre de lignes de la ligne récapitulative égalise pour chaque mois. Parce que c'est de la comptabilité, je arrondis le nombre à .00 et le stocke en DB. Je veux interdire la saisie des numéros qui ne sont pas divisibles par 12.Disallow numéros divisés pas également en jquery

Unfortunatelly mon algorithme a un défauts:/

(.! Ex entrée 11, des modifications à 11,08 = 12 * 0,93)

function round(num) { 
    return Math.ceil(num * 100)/100; 
} 

$("#summary").change(function() { 
    var summaryValue = $(this).val(); 
    var monthCount = $('.month').length; 

    var remainder = (summaryValue * 100) % monthCount; 
    summaryValue = (summaryValue * 100 + remainder)/100; 
    $(this).val(summaryValue);  

    var avarage = round(summaryValue/monthCount); 

    $('.month').each(function(key, value) { 
     $(this).val(avarage); 
    }); 
}); 

http://jsfiddle.net/igos/z3EEQ/

Toute idée comment la mettre en œuvre mieux?

  1. par divisibles par 12 Je veux dire, chaque numéro allow est Devided avec max 2 chiffres après le coma.
  2. Donc 11 sera changé en 11,04 parce que 0,92 * 12 = 11,04;
  3. 1324 => 1324,08 = 110,34 * 12
  4. Je ne peux pas dire: mauvais numéro, parce que je veux offrir à l'utilisateur le numéro le plus proche auquel il voulait initialement entrer.
+0

Pouvez-vous ajouter juste une instruction if, quelque chose comme 'si (nombre% 12 = 0) {// pas un bon nombre} ' – tymeJV

+0

Je suppose que tout peut être divisible par 12. Voulez-vous dire qu'il ne devrait pas être un nombre à virgule flottante ou quoi? – VisioN

+1

Que voulez-vous que se passe-t-il lorsque 11 est entré? –

Répondre

0

Vous devez soustraire le reste. Si vous voulez que le numéro le plus proche de l'original, puis soustraire le reste et ajouter 12 si le reste est supérieur à 6:

var remainder = (summaryValue * 100) % monthCount; 
summaryValue = (summaryValue * 100 - remainder + (remainder > 6? 12 : 0))/100; 
Questions connexes