Я собираюсь положиться на поговорку, что ни один вопрос не является глупым вопросом, но у меня есть немного глупый вопрос.
ИЗМЕНИТЬ:
Кажется, что этот вопрос уже задавали и отвечали здесь несколько раз, хотя с использованием заголовков, которые я не встречал при поиске дубликатов. Вот несколько связанных сообщений:
- Двойное преобразование в строку без научной нотации
- Как преобразовать двойной строка без силы до 10 представления (E-05)
- Место с ответом (Джон Скит): http://www.yoda.arachsys.com/csharp/DoubleConverter.cs
Исходный вопрос:
У меня есть приложение, которое иногда хранит прилично маленькие числа, например 0.000023425
. Эти числа загружаются в элементы управления TextBox
для редактирования пользователями. Следующий надуманный пример показывает мою проблему:
Dim number As Double = 0.000023425
someTextBox.Text = number.ToString() ' Shows "2.3425E-05"
Как уже упоминалось, отображается текст 2.3425E-05
, который не совсем интуитивно понятен пользователю, плюс у меня есть еще более точные числа (до 19 знаков после запятой). Я хотел бы, чтобы выход был фиксированной точкой. Конечно, я мог бы легко и чисто сделать:
number.ToString("F20") ' Shows "0.00002342500000000000"
Но тогда остается раздражающее количество нулей. Итак, чтобы исправить это, я мог бы сделать:
number.ToString("#,##0.####################") ' Shows "0.000023425"
Это то, что я хочу, но есть ли лучший способ сделать это, чем иметь эту гигантскую уродливую строку формата? Итак, ладно, это не так безобразно, но наверняка есть другой способ, верно? Моя цель - показать необработанное значение, хранящееся в БД, в дружественной форме, и я бы предпочел вообще не навязывать формат числа.
Спасибо!
ОБНОВЛЕНИЕ
Возможно, я слишком много сказал в посте. После некоторых экспериментов я обнаружил, что изменение базового типа данных на Decimal
решает проблему.
Dim number As Decimal = 0.000023425
someTextBox.Text = number.ToString() ' Shows "0.000023425" instead of "2.3425E-05"
Получается, что Double
недостаточно точны для нормального отображения?
ИЗМЕНИТЬ
Я нашел сообщение (хотя и без голосов), в котором значение Double просто преобразуется в десятичное число, а затем применяется к нему .ToString()
, что дает желаемый эффект. Есть ли причина, по которой я не хотел бы этого делать? Возможно, приведение к Decimal
может закончиться значением, отличным от Double
(даже если это незначительная величина), поэтому, возможно, строка формата #,##0.#################...
безопаснее.