Как манипулировать строкой, представляющей необработанное число (например, 130000.1293), в форматированную строку (например, 130,000.13)? - PullRequest
0 голосов
/ 22 января 2019

В скрипте приложений я хочу получить отформатированные строки 'number'. На входе находится неформатированное число. С более ранним ответом, опубликованным @slandau, я подумал, что нашел решение, изменив его код (см. Фрагмент кода). Это работает в codepen, но не когда я использую скрипт приложения. 1. Кто-нибудь знает, что здесь пошло не так? 2. Я заметил, что этот код работает, за исключением ввода числа, заканчивающегося на .0, в этом случае возвращаемое значение также равно .0, но должно быть .00. Я хотел бы помочь исправить это тоже. Спасибо!

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

function commaFormatted(amount)
{
    var delimiter = ","; // replace comma if desired
    var a = amount.split('.', 2);
    var preD = a[1]/(Math.pow(10,a[1].length-2));
    var d = Math.round(preD);
    var i = parseInt(a[0]);
    if(isNaN(i)) { return ''; }
    var minus = '';
    if(i < 0) { minus = '-'; }
    i = Math.abs(i);
    var n = new String(i);
    var a = [];
    while(n.length > 3)
    {
        var nn = n.substr(n.length-3);
        a.unshift(nn);
        n = n.substr(0,n.length-3);
    }
    if(n.length > 0) { a.unshift(n); }
    n = a.join(delimiter);
    if(d.length < 1) { amount = n; }
    else { amount = n + '.' + d; }
    amount = minus + amount;
    return amount;
}

console.log(commaFormatted('100000.3532'))

Ожидаемый результат будет 100 000,35. Я получаю это в IDE codepen, но в GAS IDE останавливается на метод .split () => не функция. При преобразовании var a в строку = я не получаю ["100000", "3532"] при ведении журнала var a. Вместо этого я получаю 100000 и ожидал 3532.

1 Ответ

0 голосов
/ 22 января 2019

Исходя из этого ответа , ваша функция может быть переписана в

function commaFormatted(amount)
{
  var inputAmount;
  if (typeof(amount) == 'string') {
    inputAmount = amount;
  } else if (typeof(amount) == 'float') {
    inputAmount = amount.toString();
  }
  //--- we expect the input amount is a String
  //    to make is easier, round the decimal part first
  var roundedAmount = parseFloat(amount).toFixed(2);
  //--- now split it and add the commas
  var parts = roundedAmount.split(".");
  parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  return parts.join(".");
}

console.log(commaFormatted(100000.3532));
console.log(commaFormatted('1234567.3532'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...