Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Double в строку / 25 сообщений из 28, страница 1 из 2
01.11.2013, 19:38
    #38450479
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
Почему число 47.200000762939496 при выводе всех знаков
...
Рейтинг: 0 / 0
01.11.2013, 19:39
    #38450481
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
val.ToString("f15");
...
Рейтинг: 0 / 0
01.11.2013, 19:41
    #38450482
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
дает значение 47.200000762939500
Как получить значение "47.200000762939496" ?
...
Рейтинг: 0 / 0
01.11.2013, 19:54
    #38450491
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
vlsafдает значение 47.200000762939500
Как получить значение "47.200000762939496" ?

получилось это сделать с decimal при такой постановке вопроса: d.ToString("N20")
...
Рейтинг: 0 / 0
01.11.2013, 20:09
    #38450500
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
Нет.
(decimal) val дает значение 47.2000007629395
...
Рейтинг: 0 / 0
01.11.2013, 20:15
    #38450505
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
vlsafНет.
(decimal) val дает значение 47.2000007629395

пробуем код
Код: c#
1.
2.
            decimal d = 47.200000762939496m;
            string s = d.ToString("N20");
...
Рейтинг: 0 / 0
01.11.2013, 20:18
    #38450508
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
да и просто ToString() проканает, туплю
...
Рейтинг: 0 / 0
01.11.2013, 20:22
    #38450510
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
Вот только из отладчика вытащил

47.200000762939496.ToString() "47,2000007629395" string
...
Рейтинг: 0 / 0
01.11.2013, 20:23
    #38450512
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
Вот еще:
(decimal) 47.200000762939496 47.2000007629395 decimal
...
Рейтинг: 0 / 0
01.11.2013, 20:23
    #38450513
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
vlsafВот только из отладчика вытащил

47.200000762939496.ToString() "47,2000007629395" string

Запустите, пожалуйста, мой код. Ваша строка - double, а не decimal.
...
Рейтинг: 0 / 0
01.11.2013, 20:24
    #38450516
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
Исходное число - это double
При конвертации его в decimal точность теряется!
...
Рейтинг: 0 / 0
01.11.2013, 20:24
    #38450517
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
скормите отладчику
Код: c#
1.
47.200000762939496m.ToString()
...
Рейтинг: 0 / 0
01.11.2013, 20:25
    #38450518
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
А вопрос был именно в том, как у double вывести все знаки на печать.
...
Рейтинг: 0 / 0
01.11.2013, 20:25
    #38450519
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
...
Рейтинг: 0 / 0
01.11.2013, 20:30
    #38450523
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
Дмитрий, я в курсе, что decimal имеет большую точность, но при конвертации double в decimal точность теряется. И вывод decimal в строку уже не имеет смысла. Я выше приводил пример.
...
Рейтинг: 0 / 0
01.11.2013, 20:31
    #38450525
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
точность double - 15-16 знаков
в числе "47.200000762939496" их 18
...
Рейтинг: 0 / 0
01.11.2013, 20:32
    #38450528
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
vlsafДмитрий, я в курсе, что decimal имеет большую точность, но при конвертации double в decimal точность теряется. И вывод decimal в строку уже не имеет смысла. Я выше приводил пример.

Можно еще раз пример, где был double и при переводе в decimal потерялась точность?
...
Рейтинг: 0 / 0
01.11.2013, 20:34
    #38450532
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
Вот прямо из отладчика
(decimal) 47.200000762939496 47.2000007629395 decimal
...
Рейтинг: 0 / 0
01.11.2013, 20:35
    #38450536
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
А вот без конвертирования в double/ Тоже из отладчика
(double)47.200000762939496 47.200000762939496 double
...
Рейтинг: 0 / 0
01.11.2013, 20:36
    #38450537
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
Ой. Хотел сказать без конвертирования в decimal
...
Рейтинг: 0 / 0
01.11.2013, 20:36
    #38450539
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
vlsafВот прямо из отладчика
(decimal) 47.200000762939496 47.2000007629395 decimal

вы задаете ему число 47.200000762939496, которое сразу воспринимается как double, и там же теряет точность, а потом переводите его в decimal. Нужен сразу decimal. если хотите сохранить значение.
...
Рейтинг: 0 / 0
01.11.2013, 20:37
    #38450540
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
vlsafА вот без конвертирования в double/ Тоже из отладчика
(double)47.200000762939496 47.200000762939496 double

вот тут отладчик врет, кстати. Оно там УЖЕ не такое. Не знаю, почему врет.
...
Рейтинг: 0 / 0
01.11.2013, 20:40
    #38450545
vlsaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
Нашел. Нужно выводить вот так:
47.200000762939496.ToString("R") "47,200000762939496" string
теперь ничего не теряется. :)
...
Рейтинг: 0 / 0
01.11.2013, 20:45
    #38450547
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
vlsafНашел. Нужно выводить вот так:
47.200000762939496.ToString("R") "47,200000762939496" string
теперь ничего не теряется. :)

хм... не знал такую штуку. Щас проверил: на один знак больше - и потеряется.
...
Рейтинг: 0 / 0
01.11.2013, 20:55
    #38450554
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double в строку
Binary floating point and .NET
DoubleConverter

System.Diagnostics.Debug.WriteLine(DoubleConverter.ToExactString(47.200000762939496));
-----------------
47.2000007629394957575641456060111522674560546875
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Double в строку / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]