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

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

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

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

47.200000762939496.ToString() "47,2000007629395" string

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

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

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

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

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

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


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