Как я могу отформатировать целое число к определенной длине в JavaScript?

Я смог найти ответ самостоятельно:)

здесь пример кода

void main(){
  runApp(MaterialApp(
    home: MyWidget(),
  ));
}

class MyWidget extends StatelessWidget {

  Widget build(BuildContext context) {
    // retrieve the mediaQuery data
    final mediaQueryData = MediaQuery.of(context);
    if (mediaQueryData.accessibleNavigation) {
      return Text('Screen reader is on');
    } else {
      return Text('Screen reader is off');
    }
  }

}

СПАСИБО :))

Обновление: [ 116]

Я проверил код с включенными функциями увеличения и выбора речи ... но на выходе не произошло никаких изменений. Как это происходит от свойства availableNavigation [Window.AccessibilityFeatures] ,. Это приводит к тому, что существует работающая служба доступности, которая меняет модель взаимодействия устройства. Я думаю, что это только для чтения с экрана.

38
задан Kip 25 April 2015 в 15:47
поделиться

6 ответов

Я знаю, что этот вопрос довольно стар, но для любого ищущего что-то подобное для Строкового представления форматирование на Java или Python у меня есть эти вспомогательные методы:

String.format = (...args) => {
    if( args.length == 0 ){
        throw new Error("String format error: You must provide at least one argument");
    }
    const delimiter = "@LIMIT*";
    const format = String(args.shift(1,0)).replace(/(%[0-9]{0,}[sd])/g, delimiter+"$1"+delimiter).split(delimiter); // First element is the format
    if( [...format].filter(el=>el.indexOf("%")>-1).length != args.length ){
        throw new Error("String format error: Arguments must match pattern");
    }
    if( format.length == 1 && args.length == 0 ){
        return String(format);
    }
    let formattedString = "";
    // patterns
    const decimalPattern = /%[0-9]{0,}d/;
    const stringPattern  = /%s/;
    if( format.length == 0 ){
        throw new Error("String format error: Invalid format");
    }
    let value        = null;
    let indexOfParam = 0;
    let currPattern  = null;
    while( args.length > 0 ) {
        currPattern = format[indexOfParam];
        indexOfParam++;
        if( currPattern.indexOf("%")<0 ){
            formattedString+=currPattern;
            continue;
        }
        value = args.shift(0,1);
        if( decimalPattern.test(currPattern) ){
            let numberLength = parseInt(currPattern.replace(/[^0-9]/g,''));
            if( isNaN(numberLength) ){
                numberLength = 0;
            }
            formattedString+=numberToLength(value, numberLength);
        } else if( stringPattern.test(currPattern) ) {
            if( typeof value === 'object' && value.toSource ){
                formattedString+=String(value.toSource());
            } else {
                formattedString+=String(value);
            }
        } else {
            throw new Error("String format error: Unrecognized pattern:"+currPattern);
        }
    }
    return formattedString;
}

const numberToLength = (number, length) => {
    length = parseInt(length);
    number = String(number);
    if( isNaN(length) || isNaN(parseInt(number)) ){
        throw new Error("Invalid number passed");
    }
    while( number.length < length ) {
        number = "0" + number;
    }
    return number;
}
0
ответ дан 27 November 2019 в 02:59
поделиться

Я не думаю, что в языке JavaScript есть что-то «встроенное» для этого. Вот простая функция, которая делает это:

function FormatNumberLength(num, length) {
    var r = "" + num;
    while (r.length < length) {
        r = "0" + r;
    }
    return r;
}


FormatNumberLength(10000, 5) outputs '10000'
FormatNumberLength(1000, 5)  outputs '01000'
FormatNumberLength(100, 5)   outputs '00100'
FormatNumberLength(10, 5)    outputs '00010'
42
ответ дан 27 November 2019 в 02:59
поделиться

A funny (but interesting) way to prefix numbers with zeros:

function FormatInteger(num, length) {

    return (num / Math.pow(10, length)).toFixed(length).substr(2);
}
6
ответ дан 27 November 2019 в 02:59
поделиться

Это может помочь:

String.prototype.padLeft = function (length, character) { 
     return new Array(length - this.length + 1).join(character || '0') + this; 
}

var num = '12';

alert(num.padLeft(4, '0'));
16
ответ дан 27 November 2019 в 02:59
поделиться

Как насчет чего-то вроде этого:

function prefixZeros(number, maxDigits) 
{  
    var length = maxDigits - number.toString().length;
    if(length <= 0)
        return number;

    var leadingZeros = new Array(length + 1);
    return leadingZeros.join('0') + number.toString();
}
//Call it like prefixZeros(100, 5); //Alerts 00100
2
ответ дан 27 November 2019 в 02:59
поделиться

Вы можете сойти с ума от таких методов:

function PadDigits(input, totalDigits) 
{ 
    var result = input;
    if (totalDigits > input.length) 
    { 
        for (i=0; i < (totalDigits - input.length); i++) 
        { 
            result = '0' + result; 
        } 
    } 
    return result;
} 

Но это не облегчит жизнь. В C # есть такие методы, как PadLeft и PadRight в классе String, к сожалению, Javascript не имеет встроенной функции

1
ответ дан 27 November 2019 в 02:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: