#c# #double #decimal
Вопрос:
Как мне сохранить конечные нули, как в примере ниже. Когда я ввожу-.230 без начальных нулей, он отображает только -0.23 без конечного нуля. Но когда я ввожу -0.230, это дает ожидаемый результат -0.230.
Actual output: -.230 -> -0.23
Expected output: -.230 -> -0.230
Я тоже пробовал String.Format("{0:0.000}", n)
, но это все равно не работает.
Ответ №1:
Похоже, вы переходите на string
, так что вы можете использовать следующее
someNumber.ToString("N3");
Смотрите документы MSDN для получения подробной информации о том, как это работает, примерно в середине страницы также приведены примеры множества различных кодов.
Ответ №2:
Похоже, что вы печатаете тот же номер, на котором вы выполнили string.format.
Попробуйте сохранить выходные данные string.format и использовать их. Я использовал тот же подход, что и вы, и получил ожидаемый ответ. Обратитесь к следующему коду
var n = -.23;
string str = string.Format("{0:0.000}", n);
Console.WriteLine(str); // This will give you an expected output
Console.WriteLine(n); // This won't give you an expected output
Ответ №3:
double
и decimal
упомянутые в вопросе, являются совершенно разными типами. double
это двоичное значение с плавающей запятой, и оно не содержит завершающих нулей:
double value = -0.230;
Console.Write(value); // -0.23
В отличие double
от того , decimal
что десятичная система с плавающей запятой сохраняет конечные нули:
decimal value = -0.230m; // note suffix "m"
Console.Write(value); // -0.230
При представлении в виде string
значений этих типов они могут быть отформатированы, например, с F3
строка формата, которая обозначает «3 цифры после десятичной точки»:
double v1 = -0.230;
decimal v2 = -0.230m;
Console.Write($"{v1:f3} {v2:f3}");
Исход:
-0.230 -0.230