• Предмет: Информатика
  • Автор: vovapecherscky
  • Вопрос задан 3 года назад

C#. Как получить количество цифр, идущих после запятой? Например, 2.1563 - 4 цифры после запятой, 15 - 0.


vovapecherscky: Хаха, я просто из числа перевел в строку, циклом определил где точка и считал)
Console.WriteLine("Введите число: ");
string num = Convert.ToString(Console.ReadLine());

bool dot = false;
int count = 0;
for(int i = 0; i < num.Length; i++)
{
if(num[i] == '.')
{
dot = true;
continue;
}
if(dot)
{
count++;
}
}

Console.WriteLine(count);
vovapecherscky: О, лол, ты также))
zheqwen: ну да, алгоритм то на всех языках одинаковый, только записывается по-разному)
vovapecherscky: ага)
serd2011: А зачем вручную искать точку? std::string::find_last_of
serd2011: А, это шарп, тогда String.LastIndexOf
vovapecherscky: спасибо)
vovapecherscky: й
ц
vovapecherscky: ой
serd2011: А количество просто разностью длины строки и индексом точки

Ответы

Ответ дал: MaxLevs
1

Метод CountNumbersAfterDot() реализует вычисления количества цифр после запятой.

Метод ChekNumber() - обёертка для вызова метода, передающая аргумент и результат на старндартный вывод.

Иллюстрации кода в закреплённых материалах. Сам код - ниже.

=======================

Оценки и отзывы помогают лучше оценить качество ответа.

Если ответ удовлетворил, отметь его как "Лучший".

=======================

Код:

using System;

using System.Text.RegularExpressions;

namespace CountNumbersAfterTheDot

{

   public static class Somebody

   {

       public static void Main()

       {

           CheckNumber("2.1563");

           CheckNumber("11.11.11");

           CheckNumber("");

           CheckNumber("15");

       }

       private static Result<int> CheckNumber(string number)

       {

           var checkResult = CountNumbersAfterDot(number);

           Console.WriteLine($"{number} :- {checkResult}");

           return checkResult;

       }

       private static Result<int> CountNumbersAfterDot(string number) {

           var numberTemplate = new Regex(@"[+-]?^\d+(.\d+)?$");

           if (numberTemplate.IsMatch(number))

           {

               var dotPosition = number.LastIndexOf(".", StringComparison.Ordinal);

               return dotPosition == -1 ? Result<int>.CreateResult(0) : Result<int>.CreateResult(number.Length - dotPosition - 1);

           }

           

           else

           {

               return Result<int>.CreateError($"[{number}] is not a number!");

           }

       }

   }

   

   public class Result<T> {

       public T Data { get; }

       public string Error { get; }

       public bool Success => string.IsNullOrEmpty(Error);

       private Result(T data, string error)

       {

           Data = data;

           Error = error;

       }

       public static Result<T> CreateResult(T data)

       {

           return new Result<T>(data, null);

       }

       public static Result<T> CreateError(string error)

       {

           error = string.IsNullOrWhiteSpace(error) ? "Error!" : error;

           return new Result<T>(default(T), error);

       }

       public override string ToString()

       {

           return Success ? Data.ToString() : Error;

       }

   }

}

Приложения:

vovapecherscky: Но всё равно спасибо)
vovapecherscky: А не легче перевести в строку, а потом считать?)
string num = Convert.ToString(Console.ReadLine());

bool dot = false;
int count = 0;
for(int i = 0; i < num.Length; i++)
{
if(num[i] == '.')
{
dot = true;
continue;
}
if(dot)
{
count++;
}
}

Console.WriteLine(count);
MaxLevs: Может быть, легче
MaxLevs: Но "работающий" код не значит "хороший" код.
MaxLevs: Важно научиться не только писать то, что работает, как его просят, но и то, что можно потом легко усовершенствовать или расширить, etc.
MaxLevs: А это вопрос архитектуры
MaxLevs: Например, если передать в твой код "11.11.11". Он выведет 5
MaxLevs: Или какое-нибудь предложение.
MaxLevs: Должен ли он производить верификацию входных данных? Как код поведет себя без неё? В этом задании всё +- однозначно, но чем больше проект, тем больше потом головной боли
Вас заинтересует