|
Проблемы с float
|
|||
---|---|---|---|
#18+
SQL2008r2 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Как с этим бороться? И почему именно при умножении на 100 вывалилась проблема? Ясно, что лучше вообще избегать float, но у нас оно много где используется. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 14:13 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
denmat, float не точный тип, почему конкретно именно 150.2 на 100 не может правильно умножить и преобразовать к инту сказать трудно, 150.1 или 150.3 нормально проходят. В этом примере, можно привести сначала флоат к децималу, а потом уже с ним выполнять действия. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 14:27 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
denmat, потому что float - это весьма неточный тип данных, а приведение к int отсекает всю нецелую часть (а не округляет). Т.е. реально в переменной оказалось что-то типа 150.199999999 (цифру взял от балды). Если так уж важен float, вместо int можно использовать decimal: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Но лучше изначально использовать decimal, особенно если в дальнейшем будет масса разных вычислений. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 14:31 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
upd: пример с cast( as dec(29,10)) работает именно для 150.2, но не факт, что будет работать для другого числа. Избавьтесь от float и не насилуйте мозг)) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 14:34 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
Избавиться дело не хитрое. Вот понять бы суть проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 14:48 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
denmatВот понять бы суть проблемы. Проблема с понимаем арифметики чисел с плавующей запятой ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 14:54 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
denmatИзбавиться дело не хитрое. Вот понять бы суть проблемы. потому что fioat - неточный тип, вам же сказали Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 14:57 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
denmat, В типе флоат (как впрочем и в децимале и иных ), в отличии от инта, хранится не само число, а некая совокупность аргументов для определенной функции, согласно которой и вычисляется искомое. На пальцах ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 15:53 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Пофиг что флоат не точный тип. Это все равно явный косяк при конвертации. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 16:22 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
Вот так кстати работает. И всегда будет работать Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 16:24 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
Я сделал cast(@m numeric(18,2)) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 16:26 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
Вот что нашел в БОЛе. http://msdn.microsoft.com/ru-ru/library/ms187928(SQL.90).aspx При преобразовании между типами данных с разными длинами дробных частей результат может усекаться или округляться . В следующей таблице описано это поведение. Так что это задокументированный косяк. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 16:28 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
denmatЯ сделал cast(@m numeric(18,2))Это может не помочь, если это приведет к обрезанию. Надо именно делать round до нужного количества. round гарантированно округлит по правилам. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 16:29 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
DeffПофиг что флоат не точный тип. Это все равно явный косяк при конвертации. Косяк - это для тех, кто не знает принципов работы с такими числами. А для остальных - это нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 16:34 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
GloryDeffПофиг что флоат не точный тип. Это все равно явный косяк при конвертации. Косяк - это для тех, кто не знает принципов работы с такими числами. А для остальных - это нормально.Это задокументированный косяк. Не меняют его видимо ради совместимости с предыдущими версия. Когда-то так случайно получилось, так потом в документации и записали. От того что я понимаю как устроен флоат, мне удобней работать не становится. Это язык высокого уровня. При усечении дробной части вполне логично делать округление, а не обрезание. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 16:47 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
DeffЭто задокументированный косяк Это не косяк. Есть разные стандарты работы с числами с плавающей точкой. DeffПри усечении дробной части вполне логично делать округление, а не обрезание Удобнее кому ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 16:51 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 16:51 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
GloryDeffПри усечении дробной части вполне логично делать округление, а не обрезание Удобнее кому ?Встречный вопрос. А кому удобней от того, что иногда усекает, иногда обрезает? Сделано ради быстродействия? - Сомневаюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 17:00 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
Deff, float используется для инженерных расчетов - там целые числа почти не используются. Ни один физик не оперирует целыми - у них там все приблизительно с точностью до ... И обычно операции с плавающей запятой выполняет специализированная часть проца. И если тебе нужно челое число - будь добр - округли с нужной точностью и переходи в область целых чисел. Не стоит мешать целое с плавающим - таково правило - если не хочешь проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 17:13 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
DeffЭто задокументированный косяк. Не меняют его видимо ради совместимости с предыдущими версия. Когда-то так случайно получилось, так потом в документации и записали. Стандарт IEEE 754 :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2012, 17:17 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
Massa52Deff, float используется с точностью до ... . #define FLT_EPSILON 1.192092896e-07F /* smallest such that 1.0+FLT_EPSILON != 1.0 */ ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2012, 00:12 |
|
Проблемы с float
|
|||
---|---|---|---|
#18+
DeffВстречный вопрос. А кому удобней от того, что иногда усекает, иногда обрезает? Сделано ради быстродействия? - Сомневаюсь. Вы почему думаете, что разрядность операций и промежуточных результатов вещественных чисел у SQL Server бесконечна. А также думаете, что неявное преобразование одних типов в другие делается по вашим правилам. Вот умножьте массу солнца на массу электрона, используя только разрешенную в MSSQL точность для веществеееых чисел. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2012, 13:04 |
|
|
start [/forum/topic.php?fid=46&msg=37890527&tid=1711510]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 169ms |
0 / 0 |