Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> преобразование double to string. обрезает число 
V
    Опции темы
Dino99rus
Дата 25.10.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.1.2007

Репутация: 1
Всего: 2



Код

double d=0.70710678118654757;
string s;
s=d.ToString(); //s="0,707106781186548"

Можно ли, чтобы при конвертации в тип string, он не обрезал число. smile 

Это сообщение отредактировал(а) Dino99rus - 25.10.2007, 20:45
PM MAIL   Вверх
tol05
Дата 25.10.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 36
Всего: 170





--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Dino99rus
Дата 25.10.2007, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.1.2007

Репутация: 1
Всего: 2



Спасибо. поставил бы + да постов маловато
PM MAIL   Вверх
Dino99rus
Дата 27.10.2007, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.1.2007

Репутация: 1
Всего: 2



Мдя или округляет на один знак, как в первом посте. Или при использование Round-Trip на число больше. Про Round-Trip сказано что при выч. Math.PI=3.141592653589793, а на примере получаю 3.1415926535897931, что очень мешает. Вот среднего размера у них нет.

Уже 2-й касяк в C#... или мне так везет их находить.


Это сообщение отредактировал(а) Dino99rus - 27.10.2007, 15:17
PM MAIL   Вверх
iad
Дата 31.10.2007, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 10.9.2007
Где: Москов

Репутация: 0
Всего: -2



Цитата(Dino99rus @  25.10.2007,  20:10 Найти цитируемый пост)
Можно ли, чтобы при конвертации в тип string, он не обрезал число
если очень хочешь, то после пятнатцатого знака можешь дописать любое количество цифр, но все они будут бессмысленными.
Цитата(Dino99rus @  27.10.2007,  02:44 Найти цитируемый пост)
Уже 2-й касяк в C#... или мне так везет их находить
Тебе везет их выдумывать. Если бы попробовал пользоваться справкой, то прочитал бы про double: Its range is +/–1.7E308 with at least 15 digits of precision. 
PM MAIL   Вверх
Dino99rus
Дата 31.10.2007, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 10.1.2007

Репутация: 1
Всего: 2



Цитата(iad @  31.10.2007,  09:49 Найти цитируемый пост)
double: Its range is +/–1.7E308 with at least 15 digits of precision.  

double d=0.70710678118654757;
он спокойно это хавает, притом это число он сам записывает и возвращает типом double посчитай 
d=Math.Sqrt(2)/2; //d=0.70710678118654757 вот это он число запишет

Я бы такие глупые вопросы не зодовал если не проверял. И ничего он не обрезает.
PM MAIL   Вверх
marcusmae
Дата 31.10.2007, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 5
Всего: 39



Код

            double value = 0.5 * Math.Sqrt(2) + 1;
            value--;

Результат : 0.70710678118654746

Ты удивлён? = Я - нет  smile

Дело в том, что вещественные типы слегка шумят в хвосте, это факт. Но физики, математики и программисты, кропевшие над железом и микропрограммами сопроцессора не такие уж прям идиоты, чтобы считать их труд полным,  как ты пишешь, косяков. Это не так просто, там имеются некоторые тонкости, в частности, статистические. Язык C# (и .NET) здесь вообще ни при чём, а на работу процессоров есть стандарты и спецификации в несколько тысяч страниц. Вот несколько простых наблюдений :
  •  результат не меняется при многократном просчёте одного и того же выражения
  •  если просчитать эквивалентное выражение (другое, но с тем же результатом), хвост может измениться
  •  вещественные операции над числами с большим разбросом по порядку (напр, очень маленьким и очень большим) может вызвать неограниченную потерю значащих позиций в представлении результата вплоть до NaN и Infinity
Если так критично, попробуй воспользоваться типом decimal. Он в два раза больше : 128 бит. Подозреваю, что он - "сконструированный" (раз работает на 32-битных машинках), но точность всё-равно могла бы и повыситься :

Код

            decimal value = (Decimal)0.5 * (Decimal)Math.Sqrt(2) + (Decimal)1;
            value--; // 0.70710678118655M

            value = (Decimal)0.5 * (Decimal)Math.Sqrt(2); // 0.70710678118655M


Это сообщение отредактировал(а) marcusmae - 31.10.2007, 22:45


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0725 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.