NovichekTyrnira
@NovichekTyrnira
Начинающий гений C# индустрии

Как в C# вывести число с определенным количеством знаков после запятой?

Как мне вывести b И c не округляя их?
В коде ниже переменные b и с округляются

using System;
using System.IO;
class Program
{
    static void Main()
    {
        double x = Convert.ToDouble(Console.ReadLine());
        double b = Math.PI * Math.Sqrt(x);
        double c = 2 * Math.PI * x;
        Console.WriteLine("{0: 0.000}",b);
        Console.WriteLine("{0: 0.000}",c);
    }
}
  • Вопрос задан
  • 304 просмотра
Решения вопроса 2
mindtester
@mindtester Куратор тега C#
учусь не реагировать на вопросы.. пока трудно.. ))
два пути:
- изучать спецификаторы вывода от МС https://docs.microsoft.com/ru-ru/dotnet/standard/b... (в конце топика дополнительные ссылки, изучите их тоже)
- выполнить нужное округление заранее
https://docs.microsoft.com/ru-ru/dotnet/api/system...
https://habr.com/ru/sandbox/76182/
Ответ написан
@breathtaking
Судя по всему, стандартными средствами форматирования никак
Возможно, стоит разобраться с ICustomFormatter

На форумах встречал такое решение
Console.WriteLine("{0:f3}", Math.Truncate(1000 * value) / 1000);
Да, пишется в одну строчку, но тут арифметика, будет в какой-то степени влиять на точность

Если побаловаться с регулярными выражениями, можно написать что-то типа этого
double value = 12.129999;
Console.WriteLine(TruncateDoubleToString(value, 3));

static string TruncateDoubleToString(double value, int precision)
{
    string format = $"{{0:f{(precision < 17 ? 17 : precision)}}}";
    string str = string.Format(format, value);
    Regex regex = new Regex(@"-?\d+[\.\,]\d" + $"{{{precision}}}");
    return regex.Match(str).Value;
}

static double WeirdTruncate(double value, int precision)
{
    return double.Parse(TruncateDoubleToString(value, precision));
}
Смотрится страшно, но работает с неплохой точностью
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ПРОФЭЛИТ Казань
от 100 000 до 170 000 ₽
GD Company Санкт-Петербург
от 120 000 до 150 000 ₽
Mystery Tag Новосибирск
от 80 000 до 110 000 ₽