Я хочу преобразовать следующие 3 двойных значения в строку.
Double value converted string value
1 1
1.200 1.200
1.666 1.666
Я хочу, чтобы мои выходные значения строк были в том же формате, что и double. Средство в значениях выше 1 не имеет десятичного значения, поэтому оно останется таким же. В случае 1.200 это даст мне строку как 1.200, а то же - 1.666. Однако я попробовал метод.ToString(), но урезал значение ZERO для значения 1.200. Но я не хочу этого. Я хочу фактические значения в строковом формате.
Я признаю, что мне не нравится идея сделать это, но я написал метод расширения для типа Double для его форматирования. Не стесняйтесь менять смешные имена. :)
public static class StupidDouble
{
public static string StupidFormat(this double theValue)
{
// geth the double value to three decimal points
string s = string.Format("{0:0.000}", theValue);
// get the whole number value
int check = (int) Math.Truncate(theValue);
// if the format of the int matches the double, display without decimal places
if (string.Format("{0:0.000}", check) == s)
{
s = check.ToString();
}
return s;
}
}
С# или любой другой язык (включая SQL) не делает различий в значениях типов с плавающей запятой (float
, double
) на основе их представления в вашем коде.
Это означает, что компилятор не имеет значения между:
double v1 = 1;
а также
double v2 = 1.000;
Также в базе данных, где вы говорите (в комментариях), вы получаете эти значения.
Базы данных причин показывают децималы определенным образом из-за предопределенного форматирования, применяемого к набору результатов. Это может быть определено с помощью используемого вами инструмента базы данных или зависит от настроек вашей языковой системы. Во всяком случае, платформа.NET предоставляет вам возможности для явного форматирования ваших данных.
Вам нужно решить, какой формат лучше всего подходит вашим потребностям. Например, это будет форматировать число с 4 десятичными знаками после точки:
String.Format("{0:0.0000}", v1); // outputs 1.0000
String.Format("{0:0.0000}", v2); // outputs 1.0000 too
Если вы уже знаете нужный формат, отрегулируйте строку форматирования (первый аргумент, который выглядит как "{0:0000}"
таким образом, который наилучшим образом соответствует вашим требованиям.
decimal
в C #. 1.00m и 1.0000m разные - попробуйте распечатать их. Это верно для double
и float
, но не decimal
.
decimal
было более особенным в своем представлении, чем типы с плавающей точкой, но я не подозревала, что разница настолько значительна. Спасибо за подсказку, исправил ответ сейчас.