Точнее чем Double

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Точнее чем Double

Сообщение MIT » 13.07.2009 (Пн) 12:59

Существует ли более-иенее штатная возможность произодить вычисления, требующие точности, превосходящей Double?
Хотелось бы знаков этак 25 после запятой...
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Re: Точнее чем Double

Сообщение Ronin » 13.07.2009 (Пн) 13:02

Decimal?
С уважением,
Игорь Шувалов aka Ronin

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Точнее чем Double

Сообщение MIT » 13.07.2009 (Пн) 13:14

Хм...
MSDN писал(а):Точность: 28-29 значимых цифр

В Decimal получилось засунуть 0,0000012777564919161939830017. Это хорошо.
А почему мне кажется, что там какие-то проблемы с вычислениями быть могут?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Re: Точнее чем Double

Сообщение Ronin » 13.07.2009 (Пн) 14:12

MIT писал(а):Хм...
MSDN писал(а):Точность: 28-29 значимых цифр

В Decimal получилось засунуть 0,0000012777564919161939830017. Это хорошо.
А почему мне кажется, что там какие-то проблемы с вычислениями быть могут?


Тип данных Decimal обеспечивает наибольшее количество значащих цифр числа. Он поддерживает до 29 значащих цифр и может представлять значения, превышающие 7.9228 x 10^28. Это особенно подходит для вычислений, например финансовых, которые требуют большое количество цифр, но не могут допускать ошибки округления.

P.S. Когда кажется, креститься надо

P.P.S. Единственная проблема - производительность. Но от этого никуда не деться, либо быстро либо точно
С уважением,
Игорь Шувалов aka Ronin

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Точнее чем Double

Сообщение MIT » 13.07.2009 (Пн) 15:01

Ладно, спасибо за подсказку.

З.Ы.
Ronin писал(а):Когда кажется, креститься надо
А поможет? Может программу освятить лучше, а то если креститьтя у каждой машины - накладно выходит?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Re: Точнее чем Double

Сообщение Ronin » 13.07.2009 (Пн) 20:51

А мне не кажется...
С уважением,
Игорь Шувалов aka Ronin

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Точнее чем Double

Сообщение MIT » 14.07.2009 (Вт) 15:17

Всем Decimal хорошо, вот только она проблема - Decimal.Parse.
Думаю не следует пояснять назначение этой функции, и так понятно что она должна делать. Дожна, но не делает.
Весь вечер раскуривал MSDN, однако статья "самая по теме" содержит абсолютно нерабочий код - у меня не работает ни один из примеров, первый, ясное дело, не в счет (однако замечу, что у товарища WIlliams`а последний блок кода все же не вызвал ошибки).
В процессе раздумий был рожден следующий код:
Код: Выделить всё
Dim num As Decimal = Decimal.Parse("46.202566", System.Globalization.CultureInfo.GetCultureInfo("nl-NL"))
однако у меня он просто проглатывал разделитель, в результае чего получалось 46202566D.
Код со строчной подменой точки на запятую не катит - он во-первых ущербен изначально, а во-вторых может не работать при разный региональных настройках.

Кто что может предложить по данному поводу, как распарсить строку?

З.Ы. Всеядный Val() я оставлю на крайний случай, ибо проблема точности расчетов все еще актуальна.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

ImKarlas
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 03.07.2009 (Пт) 20:16

Re: Точнее чем Double

Сообщение ImKarlas » 14.07.2009 (Вт) 15:28

Код: Выделить всё
Dim num As Decimal = Decimal.Parse("46.202566", System.Globalization.CultureInfo.GetCultureInfo("en-US"))
- работает
Код: Выделить всё
Dim num As Decimal = Decimal.Parse("46,202566", System.Globalization.CultureInfo.GetCultureInfo("ru-RU"))
- работает
Код: Выделить всё
Dim num As Decimal = Decimal.Parse("46,202566")
- работает
Код: Выделить всё
Dim num As Decimal = Decimal.Parse("46.202566", System.Globalization.CultureInfo.GetCultureInfo("ru-RU"))
- не работает, ошибка
Код: Выделить всё
Dim num As Decimal = Decimal.Parse("46.202566")
- не работает, ошибка
Код: Выделить всё
Dim num As Decimal = Decimal.Parse("46,202566", System.Globalization.CultureInfo.GetCultureInfo("en-US"))
- не работает. выводит 46202566

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Точнее чем Double

Сообщение MIT » 14.07.2009 (Вт) 15:35

С запятой проблем никаких. Меня же интересует вполне конкретная ситуация: в изначальной строке разделитель - точка.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

ImKarlas
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 03.07.2009 (Пт) 20:16

Re: Точнее чем Double

Сообщение ImKarlas » 14.07.2009 (Вт) 15:42

Ну ставь культуру "en-US" и все. В чем проблема? Или заменяй в строке точку на запятую.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Точнее чем Double

Сообщение MIT » 14.07.2009 (Вт) 15:56

ImKarlas писал(а):Ну ставь культуру "en-US" и все. В чем проблема?
Проблема в том, мой дорогой, что
ImKarlas писал(а):- не работает. выводит 46202566
И это еще ничего, а вот после подобной конвертации от "0.000000638878236870256" останется 638878236870256D. Оно мне надо?
ImKarlas писал(а):Или заменяй в строке точку на запятую.
Ты наверно не внимательно прочитал мой пост:
MIT писал(а):Код со строчной подменой точки на запятую не катит - он во-первых ущербен изначально, а во-вторых может не работать при разный региональных настройках.
На англоязычных машанах он не робатает.
Мне же нужна универсальность - изначально число может быть только с точкой в виде строки и его необходимо без потери знака, разделителя и точности перевести в Decimal.
Т.е. было "0.000000638878236870256", стало 0,000000638878236870256D
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Точнее чем Double

Сообщение iGrok » 14.07.2009 (Вт) 19:48

MIT писал(а):Проблема в том, мой дорогой, что
ImKarlas писал(а):- не работает. выводит 46202566
И это еще ничего, а вот после подобной конвертации от "0.000000638878236870256" останется 638878236870256D. Оно мне надо?


Ты, похоже, сам себе противоречишь. То ты говоришь, что изначально число может быть ТОЛЬКО с точкой, то говоришь, что нужна универсальность.

Если только с точкой - ставь "en-US". Если нужна универсальность, тогда откуда у тебя "только точка"?

Числа откуда берутся?
label:
cli
jmp label

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Точнее чем Double

Сообщение Alec » 14.07.2009 (Вт) 20:13

MIT писал(а):В процессе раздумий был рожден следующий код:
Код: Выделить всё
Dim num As Decimal = Decimal.Parse("46.202566", System.Globalization.CultureInfo.GetCultureInfo("nl-NL"))
однако у меня он просто проглатывал разделитель, в результае чего получалось 46202566D.

Как ты думаешь, в в Нидерландах ("nl-NL")применяется какой разделитель? WinXP в "языке и региональных настройках" показывает, что для Нидерланд разделителем является запятая...
Иногда лучше вовремя остановиться...
И начать заново!

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Точнее чем Double

Сообщение MIT » 14.07.2009 (Вт) 20:45

iGrok писал(а):Числа откуда берутся?
Откуда - не важно, факт в том что число всегда имеет разделителем точку.
iGrok писал(а):Ты, похоже, сам себе противоречишь. То ты говоришь, что изначально число может быть ТОЛЬКО с точкой, то говоришь, что нужна универсальность.
Нет, я себе не противоречу. Необходим способ, который при любых региольнальных настройках из строчки (в которой всегда используется точка) сделает число (без ошибок и с сохраненнием знака, положения разделителя и точности)

iGrok писал(а):Если только с точкой - ставь "en-US". Если нужна универсальность, тогда откуда у тебя "только точка"?
Блин, может я сильно туплю, но вчера это не работало... Сегодня работает. :?

Alec писал(а):Как ты думаешь, в в Нидерландах ("nl-NL")применяется какой разделитель?
А вот MSDN, кажется, говорит что точка.

Хм... Пойду разбираться дальше.


З.Ы. Пойду-ка лучше я посплю немного.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Точнее чем Double

Сообщение iGrok » 15.07.2009 (Ср) 0:17

MIT писал(а):
iGrok писал(а):Если только с точкой - ставь "en-US". Если нужна универсальность, тогда откуда у тебя "только точка"?
Блин, может я сильно туплю, но вчера это не работало... Сегодня работает. :?
...
З.Ы. Пойду-ка лучше я посплю немного.

Видимо, вчера ты тоже не выспался, и вместо en-US поставил nl-NL (судя по постам). А там не точка, а запятая. Вот и не работало. :)
label:
cli
jmp label

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Точнее чем Double

Сообщение Alec » 15.07.2009 (Ср) 0:29

Offtop:
Отсюда мораль - крепкий сон - залог здоровья!
Иногда лучше вовремя остановиться...
И начать заново!


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 79

    TopList  
cron