Как добавить десятичную точку к десятичному числу в accounting.js? - PullRequest
0 голосов
/ 03 июля 2018

Я работаю в торговой точке и использую accounting.js для форматирования числа на сумму, которая предлагается в платежном модуле.

Очевидно, я хочу, чтобы поле имело плавающее значение, поэтому у меня есть этот виртуальный цифровой блок, который при нажатии будет объединять значение для кнопки следующим образом:

enter image description here

Но когда я нажимаю десятичную кнопку, она не работает. Вот что я пробовал до сих пор, не зная, что мне не хватает.

// Payment Numpad  
$('section.payment-numpad .number-char').click(function(){

    let num = $(this).data('action');
    let defaultAmt = $('td.col-tendered.edit').text().replace(/,/g, "");
    let tendered;
    if(defaultAmt === "0.00"){
        tendered = num;
    }else{
        tendered = defaultAmt + num;
    }

    $('td.col-tendered.edit').text(accounting.formatNumber(parseFloat(tendered)));
    return false;
});

Я также попробовал .toFixed(2) в accounting.js, но все равно не работает.

ОБНОВЛЕНИЕ: Вот видео для справки

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Попробуйте, надеюсь, это поможет вам:)

function operator(amt, num) {
    let val = '';
    switch (num) {
     case '.':
      if (parseFloat(amt) == 0) {
       val = '0.';
      } else {
       if (amt.indexOf('.') > -1) {
        val = amt;
       } else {
        val = amt + '.';
       }
      }
      break;
    }
    return val;
   }

   $('section.payment-numpad .number-char').click(function () {
    let that = $(this),
            data = that.data(),
            num = data.action;

    let defaultAmt = $('.col-tendered.edit').data('value');
    let tendered;

    if (isNaN(parseFloat(defaultAmt))) {
     defaultAmt = 0;
    }

    if (that.hasClass('operator')) {
     tendered = operator(defaultAmt, num);
    } else {
     tendered = defaultAmt + '' + num;
    }

    $('.value').text(tendered);
    $('.col-tendered.edit').attr('data-value', tendered).data('value', tendered);
    var precision = 2;
    /*if (tendered != '') {
     var s = tendered.split('.');
     if (s[1] != undefined) {
      precision = s[1].length;
     }
    }*/
    $('.col-tendered.edit').text(accounting.formatNumber(parseFloat(tendered), precision));
    return false;
   });
table {
  width: 100%;				
}
.number-char {
  padding: 10px;
  background: #000;
  color: #fff;
  cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  <script src="http://openexchangerates.github.io/accounting.js/accounting.min.js"></script>
  <section class="payment-numpad">
   <div class="col-tendered edit" data-value=""></div>
   <!--<div>Input Value: <span class="value"></span></div>-->
   <table>
    <tr>
     <td class="number-char" data-action="1">1</td>
     <td class="number-char" data-action="2">2</td>
     <td class="number-char" data-action="3">3</td>
    </tr>
    <tr>
     <td class="number-char" data-action="4">4</td>
     <td class="number-char" data-action="5">5</td>
     <td class="number-char" data-action="6">6</td>
    </tr>
    <tr>
     <td class="number-char" data-action="7">7</td>
     <td class="number-char" data-action="8">8</td>
     <td class="number-char" data-action="9">9</td>
    </tr>
    <tr>
     <td class="number-char" data-action="0">0</td>
     <td class="number-char operator" data-action=".">.</td>
    </tr>
   </table>
  </section>

Используйте precision для установки фиксированного значения после десятичного числа

var precision = 2;
$('.col-tendered.edit').text(accounting.formatNumber(parseFloat(tendered), precision));
0 голосов
/ 03 июля 2018

Это в документации. Либо измените настройку глобально ...

// Settings object that controls default parameters for library methods:
accounting.settings = {
    currency: {
        symbol : "$",   // default currency symbol is '$'
        format: "%s%v", // controls output: %s = symbol, %v = value/number (can be object: see below)
        decimal : ".",  // decimal point separator
        thousand: ",",  // thousands separator
        precision : 2   // decimal places
    },
    number: {
        precision : 0,  // default precision on numbers is 0
        thousand: ",",
        decimal : "."
    }
}

или изменить настройку локально ...

// Standard usage and parameters (returns string):
accounting.formatNumber(number, [precision = 0], [thousand = ","], [decimal = "."])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...