Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2011, 14:50   #1
Дамир
Пользователь Подтвердите свой е-майл
 
Регистрация: 06.12.2006
Сообщений: 61
Вопрос Преобразование double в string без округления

Доброго времени суток!

Задача:
Преобразовать double в string. Пример числа: x=53.236267268657684

Проблема:
При преобразовании (x.ToString()) в строку число округляется. Результат: "53.2362672686577", т.е. потеряны последние 2 цифры, а третья цифра справа увеличена на 1.

Вопрос:
Как выполнить преобразование числа в строку так, что бы округление не выполнялось?
Дамир вне форума Ответить с цитированием
Старый 09.02.2011, 15:59   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Никак, у дабл не хватает разрядности, чтобы хранить столько значащих цифр.

Юзайте тип decimal, у него меньше диапазон допустимых значений, но больше значащих цифр.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 09.02.2011, 16:31   #3
Дамир
Пользователь Подтвердите свой е-майл
 
Регистрация: 06.12.2006
Сообщений: 61
По умолчанию

Число (53.236267268657684) я выдернул из переменной double при дебаге, значит он его спокойно хранит. А при преобразовании в строку обрезает
Дамир вне форума Ответить с цитированием
Старый 09.02.2011, 18:03   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> значит он его спокойно хранит.

ага, попробуй:

Код:
double a = 53.236267268657683;
double b = 53.236267268657684;
double c = 53.236267268657685;
и посмотри, как они спокойно хранятся:



Все эти числа неразличимы.

Максимум, что можно выжать из дабл выжимает флаг "R":

Код:
System.Console.WriteLine(x.ToString("R"))
Все числа из примера выше будут показаны как 53.236267268657684 с этим флагом.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 09.02.2011, 21:46   #5
b2soft
Упртй программер
Форумчанин
 
Регистрация: 26.11.2009
Сообщений: 150
По умолчанию

а написать
double x = x=53.236267268657684;
Console.WriteLine(x);

не поможет???? Если известно количество знаков после запятой, то просто умножь это число на 10 в степени N и получишь большое число int32 ну или если не поместится то int64. Пробуй )
Помощь с кодом/лабами по С/С++
Контакты: ICQ 623334555 Skype: btwosoft; Mail: b2soft@yandex.ru
b2soft вне форума Ответить с цитированием
Старый 10.02.2011, 16:54   #6
Дамир
Пользователь Подтвердите свой е-майл
 
Регистрация: 06.12.2006
Сообщений: 61
По умолчанию

Спасибо за помощь! Справился с задачей
Дамир вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
String to double ? NiCola999 Общие вопросы C/C++ 3 14.03.2010 12:21
Перевод String в Double mauseO Помощь студентам 2 29.01.2010 15:29
преобразование int в double Си++ t1empo Помощь студентам 11 27.04.2009 19:31
Конвертирование String в Double в виндовс формс C-мэн Общие вопросы C/C++ 3 04.10.2008 13:49