Я собираюсь положиться на высказывание, что ни один вопрос не является глупым вопросом, но у меня есть немой тупой вопрос.
EDIT:
Похоже, что этот вопрос уже задавался и отвечал здесь уже несколько раз, хотя, используя названия, с которыми я не сталкивался при поиске дубликатов. Вот несколько похожих постов:
- Двойное преобразование в строку без научной записи
- Как преобразовать double в строку без представления степени 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"
Что я хочу, но есть ли лучший способ сделать это, чем иметь там эту гигантскую уродливую строку формата? Так что, ладно, это не так страшно, но, конечно, есть другой путь, верно? Моя цель - показать необработанное значение, хранящееся в БД, дружественным способом, и я бы предпочел вообще не устанавливать формат числа.
Спасибо!
UPDATE
Возможно, я сказал слишком много в посте. После некоторых экспериментов я обнаружил, что изменение базового типа данных на Decimal
решает проблему.
Dim number As Decimal = 0.000023425
someTextBox.Text = number.ToString() ' Shows "0.000023425" instead of "2.3425E-05"
Похоже, Double
s не достаточно точны, чтобы нормально отображаться?
EDIT
Я нашел сообщение (хотя и без голосов), в котором просто используется значение Double в виде десятичного числа перед тем, как сделать на нем .ToString()
, что дает желаемый эффект. Есть ли причина, по которой я бы не хотел этого делать? Возможно, приведение к Decimal
может закончиться значением, отличным от Double
(хотя это незначительное количество), поэтому, возможно, строка формата #,##0.#################...
безопаснее.