конвертировать double в строку и показывать десятичные значения только в случае необходимости [duplicate]

1

Я хочу преобразовать следующие 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. Но я не хочу этого. Я хочу фактические значения в строковом формате.

Теги:
typeconverter

2 ответа

1

Я признаю, что мне не нравится идея сделать это, но я написал метод расширения для типа 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;
    }
}
  • 0
    Обратите внимание, что это не будет обрабатывать весь диапазон Double. Надеюсь, ваши данные имеют вменяемые значения.
  • 0
    Я думаю, что единственная глупость при таком подходе - это имя, которое вы выбрали. Возможно, если бы формат был параметром (скорее жестко запрограммирован), я бы даже подумал об использовании такого метода в своей повседневной работе (не шучу) :)
1

С# или любой другой язык (включая 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}" таким образом, который наилучшим образом соответствует вашим требованиям.

  • 1
    Это не верно для decimal в C #. 1.00m и 1.0000m разные - попробуйте распечатать их. Это верно для double и float , но не decimal .
  • 0
    @JonSkeet, да, действительно, кажется, что так (я признаю, просто я действительно попробовал это). Я знал, что decimal было более особенным в своем представлении, чем типы с плавающей точкой, но я не подозревала, что разница настолько значительна. Спасибо за подсказку, исправил ответ сейчас.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню