Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];

Вниз

MSSQL 2005 Интересное преобразование Float в строку   Найти похожие ветки 

 
stas ©   (2008-10-01 15:36) [0]

select cast (12345.123456789 as float) AS [Float],
cast (cast (12345.123456789 as float) as nvarchar (50)) as FloatToStr,
cast (cast (12345.123456789 as numeric(15,8)) as nvarchar (50)) as NumericToStr


float = 12345.123456789
FloatToStr = 12345.1
NumericToStr = 12345.123456789


 
Правильный$Вася   (2008-10-01 15:40) [1]


> cast (cast (12345.123456789 as float) as nvarchar (50))

не проще ли cast (12345.123456789 as nvarchar (50) )


 
stas ©   (2008-10-01 15:42) [2]

Правильный$Вася   (01.10.08 15:40) [1]
это для примера, если сделать cast (12345.123456789 as nvarchar (50) ) сервер его преобразует правильно т.к. примет его не за float.


 
Ega23 ©   (2008-10-01 15:51) [3]

cast (cast (1.123456789 as float) as nvarchar (50)) as FloatToStr,
cast (cast (12.123456789 as float) as nvarchar (50)) as FloatToStr,
cast (cast (123.123456789 as float) as nvarchar (50)) as FloatToStr,
cast (cast (1234.123456789 as float) as nvarchar (50)) as FloatToStr,


 
Правильный$Вася   (2008-10-01 15:54) [4]

float - это число с плавающей точкой, в нем число значащих цифр ограничено
и чем больше цифр перед точкой, тем меньше значащих после нее
потому и numeric дает верно, что там точка фиксирована


 
stas ©   (2008-10-01 15:59) [5]

Правильный$Вася   (01.10.08 15:54) [4]
не на столько же :)


 
stas ©   (2008-10-01 16:03) [6]

В BOL все написано, стиль по умолчанию 6 разрядов :)
надо так:
Select CONVERT (nvarchar(50),cast (12345.123456789 as float),2)


 
isasa ©   (2008-10-01 20:16) [7]

А почитать, что такое IEEE религия не велит?
Мантиса не резиновая.
А вешественные числа в виде 12345.123456789 пишут только в сумашедшем доме и то, только, когда врач не видит...


 
isasa ©   (2008-10-01 20:30) [8]

ЗЫ. Всетаки, раддует, что хотябы раз в год, на форуме языка, который лучше других приспособлен для "родных" действий computer, все таки всплывает вопрос о "расчете".
Не хранении, преобразовании, транспортировке, а именно о расчете.

Правда, все реже и реже. :)


 
Simpson ©   (2008-10-01 20:46) [9]

isasa ©   (01.10.08 20:16) [7]
Пока доктор занят другим больным, хочу спросить, а в массовых финансовых операциях тоже над оотрубать хвост? Было например 120.12322222 стало 120.1230000. Может точность, она играет таки роль в разных расчетах? Секунды у координат географических в округлять или отбрасывать?


 
Правильный$Вася   (2008-10-01 21:15) [10]


> Simpson ©   (01.10.08 20:46) [9]

если ты не понял, то речь идет не о точности, а о форме представления чисел
12345.123456789 куда как легче представить в виде 1.2345123456789E4


 
isasa ©   (2008-10-01 21:31) [11]

Simpson ©   (01.10.08 20:46) [9]
Может точность, она играет таки роль в разных расчетах? Секунды у координат географических в округлять или отбрасывать?


Есть конкретный результат, полученный в результате вычислений, это первая проблема. Вторая проблема - как и в каком виде(сколько знаков имеет смысл ...) его интерпретировать.
Это, разумеется, для вещественных чисел. Для денег есть конкретные форматы. Там точность напередзадана ....


 
isasa ©   (2008-10-01 21:34) [12]

ЗЫ. В рублях 120,1232222 это скоко?


 
Правильный$Вася   (2008-10-01 21:58) [13]


> В рублях 120,1232222 это скоко?

если партиями по 100 тыс штук, то много ;)


 
Ega23 ©   (2008-10-01 22:40) [14]


> а в массовых финансовых операциях тоже над оотрубать хвост?


А там разве не 4 знака после запятой?


 
Anatoly Podgoretsky ©   (2008-10-01 23:31) [15]

> stas  (01.10.2008 16:03:06)  [6]

as float(53) не пробовал?


 
Simpson ©   (2008-10-02 05:51) [16]

Правильный$Вася   (01.10.08 21:15) [10]
Читаю тему Е4 не вижу в упор, в теме отрезали хвост потеряли знаки.

isasa ©   (01.10.08 21:31) [11]
Это от задачи зависит, где то дробная часть в принципе не нужна.

isasa ©   (01.10.08 21:34) [12]
Сто двадцать рублей двенадцать копеек и остаток от деления(или другой операции).

Ega23 ©   (01.10.08 22:40) [14]
Раздали 200 рублей 3 человекам, каждый раз от операции остается 0.0066666 в периоде на сотой такой операции уже появляются деньги реальные, кому их?


 
Simpson ©   (2008-10-02 05:58) [17]

то же самое с ГИСом
cast (cast (12345.123456789 as float) as nvarchar (50)) as FloatToStr,
Погрешность в 20 км при представлении координат 3452.2343, еще больше при привычном представлении координат 34.522343.


 
Ega23 ©   (2008-10-02 10:16) [18]


> Погрешность в 20 км при представлении координат


Да нет тут никакой погрешности. Бери на клиент float и работай там с ним. Нафига в строку-то серверными средствами переводить?


 
stas ©   (2008-10-02 10:19) [19]

isasa ©   (01.10.08 20:16) [7]
Вопрос не в том кому какая точность нужна, а втом что если флоат предусматривает определенную точность, то с этой точностью он и должен быть преобразован в строку.
Но тут еще и вопрос в том что чем длиннее целая часть тем меньше дробная что совсем вводит в заблуждение.

Simpson ©   (02.10.08 05:58) [17]
С гисом как раз сталкивался, на гугл Earth уходил путь автомобиля непонятно куда, оказалось округление....

А в stas ©   (01.10.08 16:03) [6] я уже написал в чем причина.


 
isasa ©   (2008-10-02 10:54) [20]

stas ©   (02.10.08 10:19) [19]

Вопрос не в том кому какая точность нужна, а втом что если флоат предусматривает определенную точность, то с этой точностью он и должен быть преобразован в строку.


А какие проблемы?

float  4 bytes 3.4E +/- 38 (7 digits)

double 8 bytes 1.7E +/- 308 (15 digits)

Другое дело, что нормальные люди пытаются уйти от операций с данными в диапазонах
123456789000000.0 + 0.123456789
путем параметризации, где параметры изменяются в границах 2 < p < 0.


 
Правильный$Вася   (2008-10-02 11:25) [21]


> Читаю тему Е4 не вижу в упор, в теме отрезали хвост потеряли знаки.

так потому и потеряли, что выбрали неудачный формат представления числа + преобразование в строку по умолчанию, а не явным указанием
ведь дроби в виде float, как известно, имеют тенденцию к бесконечному (ограниченномутолькоразрядностью) числу знаков после запятой (в машинном представлении)
и чем меньше знаков до запятой, тем больше места под знаки после нее
поэтому формат представления с E4 выгоднее, чем без него


 
Simpson ©   (2008-10-02 19:34) [22]

Ega23 ©   (02.10.08 10:16) [18]
Да мало ли какие исходные условия, может это чей то кусок обмена даных года этак 86 доживший до наших дней.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.005 c
2-1224875284
CodeMaster
2008-10-24 23:08
2008.12.07
Поддержка скриптов


11-1196228844
Rocket
2007-11-28 08:47
2008.12.07
OpenGLContext


2-1225395211
batya-x
2008-10-30 22:33
2008.12.07
Работа с чужими окнами


15-1222843840
vajo
2008-10-01 10:50
2008.12.07
Где находится почта в Vista Home?


15-1223305707
Slider007
2008-10-06 19:08
2008.12.07
С днем рождения ! 5 октября 2008 воскресенье





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский