toString () из int e = 0000007 опускает все нули. Как я могу сохранить их? - PullRequest
2 голосов
/ 25 января 2010

Я пытаюсь написать программу на C #, которая принимает int x и решает, имеет ли она ровно 7 цифр. Прямо сейчас я использую x.toString (). Length == 7 для проверки, но я заметил, что если число начинается с 0, оно автоматически пропускается, и я получаю неправильный ответ (т.е. программа считает, что длина ввода меньше чем 7)

Есть ли способ это исправить? Заранее спасибо.

Редактировать: Извините, я должен был упомянуть, это была программа для сбора и проверки формата идентификационных номеров (поэтому я не хотел, чтобы что-то вроде 0000001 по умолчанию равнялось 1) Я собираюсь попробовать это.

Ответы [ 9 ]

6 голосов
/ 25 января 2010

Если вы хотите сохранить форматирование ввода, вы не должны конвертировать ввод в int. Вы должны хранить его в String.

Вы говорите, что ваша программа занимает int. На тот момент вы уже проиграли. Вам нужно изменить этот интерфейс, чтобы принимать String входы.

2 голосов
/ 25 января 2010

Вы можете просто написать:

int input = 5;
if(input.ToString("0000000").Length == 7)
{
    //do your stuff
}
2 голосов
/ 25 января 2010

Я думаю, вы можете отформатировать его в виде строки:

int myInt=1;
myInt.ToString("0000000");

печать:

0000001.

чтобы вы могли сделать:

if (myInt.ToString("0000000").Length==7)
2 голосов
/ 25 января 2010

Может быть, я ошибаюсь, но для меня 0000001 == 1, а 1 имеет одну цифру, а не семь. Так что это математически правильное поведение.

2 голосов
/ 25 января 2010

Если вас не интересуют начальные нули, вы действительно ищете 7 цифр или меньше. Вы можете проверить:

x.toString().Length <= 7

или лучше:

x < 10000000
1 голос
/ 25 января 2010

Вы сказали, что просите int, но я полагаю, вы получаете его как string:

int i = 0;
string number = Console.ReadLine();
if (Int32.TryParse(number, out i))
{
    //if (i.ToString().Length == 7) // you can try this too
    if (i > 999999 && i < 10000000)
    {
        Console.WriteLine("Have exactly 7 digits");
    }
    else
    {
        Console.WriteLine("Doesn't have exactly 7 digits");
    }
}
else
{
    Console.WriteLine("Not an Int32 number");
}

Таким образом, вы пытаетесь привести полученное число как Int32 и сравнить его длину.

1 голос
/ 25 января 2010

Вы должны использовать строку для проверки длины, включая 0.

Тогда я хотел бы спросить: «Почему ты хочешь показать 0000007? Для чего?»

1 голос
/ 25 января 2010

Нет. Вполне допустимо, чтобы числовой литерал имел начальные 0, но а) многие языки считают, что это восьмеричный литерал, и б) ведущие 0 фактически не существуют как часть числа. Если вам нужна строка, начните со строкового литерала.

0 голосов
/ 20 августа 2015

Вы можете сохранить число как целое число с пропущенными нулями. но затем, если вы хотите, чтобы число отображалось с нулями, вы можете использовать оператор if и цикл while. например,

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

int[] numbers = new int[3];

numbers[0] = 001;
numbers[1] = 002;
numbers[2] = 123;

String displayed_Number;

        for (int i = 0; i < numbers.Length; i++)
        {
            displayed_Number = numbers[i].ToString();

            if (displayed_Number.Length == 3)
            {
                listBox.Items.Add(displayed_Number);
            }
            else if (displayed_Number.Length < 3)
            {
                while (displayed_Number.Length < 3)
                {
                    displayed_Number = "0" + displayed_Number;
                }
                listBox.Items.Add(displayed_Number);
            }
        }

Выход 001 002 123

Таким образом, вы можете поддерживать нули в числах при отображении. и они могут быть сохранены как int, если вам нужно сохранить их как int.

...