powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Double в строку
28 сообщений из 28, показаны все 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
Double в строку
    #38450556
vlsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"R" выводит 15 знаков, но не всегда :(
Точность double это всегда 17 знаков (внутри машины)
"G17" выводит все 17 знаков.
Но вот, что интересно. Округляю до 15 знаков некое число
Math.Round(4.7129999999999992, 15) 4.7129999999999992 double
а получаю 16 знаков после запятой.
Чудеса.
...
Рейтинг: 0 / 0
Double в строку
    #38450560
vlsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRDoubleConverter.ToExactString()

Вещь! Спасибо!!!
...
Рейтинг: 0 / 0
Double в строку
    #38450565
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlsafЧудеса.
Binary floating point and .NETWorked example

Consider the following 64-bit binary number:
0100000001000111001101101101001001001000010101110011000100100011

As a double, this is split into:

Sign: 0
Exponent: 10000000100 binary = 1028 decimal
Mantissa: 0111001101101101001001001000010101110011000100100011
This is therefore a normal number of value
(-1)0 x 1.0111001101101101001001001000010101110011000100100011 (binary) x 21028-1023
which is more simply represented as
1.0111001101101101001001001000010101110011000100100011 (binary) x 25
or
101110.01101101101001001001000010101110011000100100011

In decimal, this is 46.42829231507700882275457843206822872161865234375, but .NET will display it by default as 46.428292315077 or with the "round-trip" format specifier as 46.428292315077009.

обратите внимание на последнюю фразу:
but .NET will display it by default as 46.428292315077 or with the "round-trip" format specifier as 46.428292315077009
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Double в строку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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