Как преобразовать в два знака после запятой - PullRequest
0 голосов
/ 25 января 2020

Как я могу получить значение, которое пользователь вводит, чтобы округлить до двух десятичных знаков. Я пытался использовать .ToString ("N2"), но он дал мне ошибку {не может преобразовать строку в System.IFormatProvider}. Я не могу найти решение этой ошибки.

код здесь:


using System;
using System.Text.RegularExpressions;

namespace _selfTest
{
    class Program
    {
        public static void Main(string[] args)
        {
            const string formula = @"^\d+\.?\d+?\%$";

            percentages(formula, Console.ReadLine());
        }


        public static void percentages(string bottle, string flower)
        {
            Regex newRegular = new Regex(bottle);
            bool input = newRegular.IsMatch(flower);

            if (input)
                Console.WriteLine("This Percentage Is Correct! " + bottle);
            else
                Console.WriteLine("This Percentage Is Incorrect... " + bottle);

            Console.ReadLine();
        }
    }
}

Ответы [ 2 ]

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

Вы можете использовать Decimal.TryParse метод. И тогда вы можете использовать стандартную цифру c формат строки "N2"

string consoleInput = Console.ReadLine();
if(Decimal.TryParse(consoleInput, out decimal parsedInput))
{
   string resultString = parsedInput.ToString("N2");
}
else
{
   // handling bad input
}
0 голосов
/ 25 января 2020

Ваше решение находится всего в 2 шагах

  • Разбор пользовательского ввода в десятичном формате
  • Затем округление до 2 десятичных знаков

.cs

    static void Main(string[] args)
    {


        //Parse User input
        var inputValue = Console.ReadLine();
        inputValue = inputValue.Split('%')[0]; //To handle the trailing % sign

        decimal outputValue;
        var style = NumberStyles.Any;
        var culture = CultureInfo.InvariantCulture;
        if (Decimal.TryParse(inputValue, style, culture, out outputValue))
            Console.WriteLine("Converted '{0}' to {1}.", inputValue, outputValue);
        else
            Console.WriteLine("Unable to convert '{0}'.", inputValue);

        //Rounding off 2 decimal places

        var roundedValue = Math.Round(outputValue, 2);
        Console.WriteLine(roundedValue);
        Console.Read();

    }

Примечание

Если вы заранее знаете, какую культуру вы ожидаете от своих вкладов, вы можете указать, что используя информацию о культуре

var culture = new CultureInfo("en-US");// or ("fr-FR")

...