Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 REAL - сравнение значений  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
есть таблица

create table t
(
id int identity,
value sqlvariant
)

в ней записи

8181674	1,233435E+25
8181675	1,233435E+25
8182462	1,233435E+13
8182480	1,233435E+13
8182520	1,233435E+13
8182538	1,233435E+13

пишу так:
declare @r real
set @r = 1.233435E+13 -- в таблице запятые, пришло с клиента...
SELECT * FROM T WHERE cast(value as real)>=@r

---
пусто

как сделать выборку >=, <=

?
25 май 09, 13:41    [7222814]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Glory
Member

Откуда:
Сообщений: 104760
Неточные значения сравниваются через модуль разности, который не должен превышать заранее оговоренной величины
25 май 09, 13:43    [7222827]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Неточные значения сравниваются через модуль разности, который не должен превышать заранее оговоренной величины


но в данном случае эти могли бы быть найдены?

1,233435E+25
25 май 09, 13:45    [7222840]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
пишу так:

declare @r real
set @r = 1.233435E+13 -- в таблице запятые, пришло с клиента...

SELECT * FROM T WHERE cast(value as real)-@r>0
SELECT * FROM T WHERE cast(value as real)-@r>-1



в обоих случаях находятся только записи

8181674	1,233435E+25
8181675	1,233435E+25


как юзеру все-таки найти больше или равно 1.233435E+13 ?
25 май 09, 13:49    [7222864]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Glory
Member

Откуда:
Сообщений: 104760
Winnipuh


как юзеру все-таки найти больше или равно 1.233435E+13 ?

Вы знаете, что такое модуль выражения ?
25 май 09, 13:52    [7222887]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Winnipuh
как сделать выборку >=, <=?
Вообще-то, это оператор
BETWEEN
25 май 09, 14:04    [7223007]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Winnipuh


как юзеру все-таки найти больше или равно 1.233435E+13 ?

Вы знаете, что такое модуль выражения ?


спасибо, знаю.
Я уверен, что Вы также знаете, что если значение близко к нулю, то и его модуль тоже??


Вот выборка, объясните, если не затруднит, как здесь использовать модуль?
если разность между равными(почти) значениями составляет -4194304

declare @r real
set @r = 1.233435E+13

SELECT 
value as 'value',
cast(value as real) as 'value as real',
@r  as '@r',
cast(value as real)-@r  as 'v-@r',
* 
FROM T WHERE cast(value as real)-@r<=0

value                   value as real        @r                       v-@r
---------------------------------------------------------------------------------------
1,233435E+13	1,233435E+13	1,233435E+13	-4194304 	8182462	1,233435E+13
1,233435E+13	1,233435E+13	1,233435E+13	-4194304	             8182480	1,233435E+13
1,233435E+13	1,233435E+13	1,233435E+13	-4194304	             8182520	1,233435E+13
1,233435E+13	1,233435E+13	1,233435E+13	-4194304	             8182538	1,233435E+13
0	            0                         1,233435E+13	-1,233435E+13	8184210	0
0  	            0 	             1,233435E+13	-1,233435E+13	8184220	0
25 май 09, 14:07    [7223035]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
iap
Winnipuh
как сделать выборку >=, <=?
Вообще-то, это оператор
BETWEEN


спасибо!
25 май 09, 14:08    [7223041]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Glory
Member

Откуда:
Сообщений: 104760
Winnipuh
Glory
Winnipuh


как юзеру все-таки найти больше или равно 1.233435E+13 ?

Вы знаете, что такое модуль выражения ?


спасибо, знаю.
Я уверен, что Вы также знаете, что если значение близко к нулю, то и его модуль тоже??

Нет такого значения "близко к нулю"
Есть конкретная разность двух значений.
И конкретная нужная вам точность.
Или 0.1, или 0.00001 или 0.00000000000000000000000000000000001 или еще какая.
25 май 09, 14:12    [7223079]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Как-то вот так?
DECLARE @value FLOAT, @r FLOAT;
SELECT @value=1,233435E+13, @r=4194304;
SELECT ...
FROM ...
WHERE [value] BETWEEN @value-@r AND @value+@r
25 май 09, 14:13    [7223089]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
iap
Как-то вот так?
DECLARE @value FLOAT, @r FLOAT;
SELECT @value=1,233435E+13, @r=4194304;
SELECT ...
FROM ...
WHERE [value] BETWEEN @value-@r AND @value+@r


это значение 4194304 мне неизвестно в общем случае,
я взял для переменной то значение, которое выбрал из таблицы, чтобы получить выборку для
>= 1,233435E+13.

Не получается, поскольку
как пишет коллега можно сравнивать с точностью

"И конкретная нужная вам точность.Или 0.1, или 0.00001 или 0.00000000000000000000000000000000001 или еще какая."


Но если разность между 1,233435E+13 и 1,233435E+13 составляет больше 4 млн, то как ?
25 май 09, 14:21    [7223148]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Anddros
Member

Откуда:
Сообщений: 1077
declare @r real, @delta real
set @r = 1.233435E+13 -- в таблице запятые, пришло с клиента...

select @delta='5.000000E'+cast(cast(substring(r_char,charindex('E',upper(r_char))+1,5) as int)-7 as varchar)
from (select cast(@r as varchar) r_char)tt

select * from t
where value>=@r-@delta

При сравнении '>=' или '<' использовать @r-@delta; при '<=' или '>' - @r+@delta
25 май 09, 14:22    [7223162]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Glory
Member

Откуда:
Сообщений: 104760
Winnipuh


Но если разность между 1,233435E+13 и 1,233435E+13 составляет больше 4 млн, то как ?

Мда. С математемкой у вас совсем плохо видать
0.1E-14

Сообщение было отредактировано: 25 май 09, 14:24
25 май 09, 14:23    [7223171]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Winnipuh


Но если разность между 1,233435E+13 и 1,233435E+13 составляет больше 4 млн, то как ?

Мда. С математемкой у вас совсем плохо видать
0.1E-14


у меня с математикой очень хорошо, и хмм... хотелось бы вас призвать - мы с вами не знакомы, и я не позволяю себе такие выпады в ваш адрес.
Потому держите себя в руках.

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

1,233435E+13 1,233435E+13 -4194304 <----- !!!


Я пытаюсь решить простую задачу: юзер знает, что он вводил и пытается найти
знаяения равные, больше, меньше, но получается, что разность меджду явно одинаковыми
или почти(!) значениями составляет -4194304...
25 май 09, 14:32    [7223231]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Но если разность между *1,233435E+13 и 1,233435E+13 *составляет больше 4
> млн, то как ?
> Я пытаюсь решить простую задачу: юзер знает, что он вводил и пытается найти
> знаяения равные, больше, меньше, но получается, что разность меджду явно
> одинаковыми
> или почти(!) значениями составляет -4194304...

так устроит?
where
   cast(value as real)-@r<0 or abs(cast(value as real)-@r)/(cast(value as real)+@r) < 0.01

Posted via ActualForum NNTP Server 1.4

25 май 09, 14:37    [7223266]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Glory
Member

Откуда:
Сообщений: 104760
Winnipuh

Я пытаюсь решить простую задачу: юзер знает, что он вводил и пытается найти
знаяения равные, больше, меньше, но получается, что разность меджду явно одинаковыми
или почти(!) значениями составляет -4194304...

И виноват разумеется сервер ? Вы сначала разбиритесь с тем, что у вас за данные в таблице. А потом уже говорите о своих знаниях математики

declare @t table(f1 sql_variant)
declare @r1 real, @r2 real
set @r1 = 1.233435E+13
set @r2 = 1.233435E+13

insert @t values(@r1)
select @r1, @r2, @r1-@r2, cast(f1 as real)-@r2
from @t
25 май 09, 14:39    [7223287]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Winnipuh

Я пытаюсь решить простую задачу: юзер знает, что он вводил и пытается найти
знаяения равные, больше, меньше, но получается, что разность меджду явно одинаковыми
или почти(!) значениями составляет -4194304...

И виноват разумеется сервер ? Вы сначала разбиритесь с тем, что у вас за данные в таблице. А потом уже говорите о своих знаниях математики
declare @t table(f1 sql_variant)
declare @r1 real, @r2 real
set @r1 = 1.233435E+13
set @r2 = 1.233435E+13

insert @t values(@r1)
select @r1, @r2, @r1-@r2, cast(f1 as real)-@r2
from @t


у меня есть таблица, в которой есть данные, я их выбрал (см. выше)

я снова выражаю свою просьбу: уймитесь со своим ничем не обоснованным высокомерным отношением
25 май 09, 14:43    [7223318]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Glory
Member

Откуда:
Сообщений: 104760
Winnipuh

я снова выражаю свою просьбу: уймитесь со своим ничем не обоснованным высокомерным отношением

Доказывать, что 2х2 равно 5 - это тупость. Которая не зависит от чужой высокомерности
25 май 09, 14:45    [7223337]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Winnipuh

я снова выражаю свою просьбу: уймитесь со своим ничем не обоснованным высокомерным отношением

Доказывать, что 2х2 равно 5 - это тупость. Которая не зависит от чужой высокомерности


вы странный человек, видимо вы так самоутверждаетесь.

Вы пишете не совсем о том, о чем был задан вопрос, математик
Написано, есть таблица, в ней значения, и все что я вижу это то, что я привел выше.
Я присвоил такое же(!!) значение переменной и пытаюсь искать.

Где 2*2 = 5???

Как дать юзеру выбор из существующих значений, если визуально они равны, а на самом деле в моем примере разница 4 млн.
25 май 09, 14:51    [7223387]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
baracs
Member

Откуда: Москва
Сообщений: 7198
Winnipuh
Как дать юзеру выбор из существующих значений, если визуально они равны, а на самом деле в моем примере разница 4 млн.

Сделать так, чтобы визуально было - как на самом деле...
25 май 09, 14:55    [7223421]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Glory
Member

Откуда:
Сообщений: 104760
Winnipuh
Glory
Winnipuh

я снова выражаю свою просьбу: уймитесь со своим ничем не обоснованным высокомерным отношением

Доказывать, что 2х2 равно 5 - это тупость. Которая не зависит от чужой высокомерности


вы странный человек, видимо вы так самоутверждаетесь.

Вы пишете не совсем о том, о чем был задан вопрос, математик
Написано, есть таблица, в ней значения, и все что я вижу это то, что я привел выше.
Я присвоил такое же(!!) значение переменной и пытаюсь искать.

Круто. Я тоже присвоил в своей таблице значение как у вас. И получил в результатах вычислений 0.
Причем мой скрипт в отличии от вашего содержит конкренный insert, а не слова "у меня есть таблица, в которой есть данные". И кто тут тогда доказывает, что 2х2 дает разницу "в 4милиона" ?
25 май 09, 14:56    [7223431]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
iljy
Guest
Winnipuh

Я пытаюсь решить простую задачу: юзер знает, что он вводил и пытается найти
знаяения равные, больше, меньше, но получается, что разность меджду явно одинаковыми
или почти(!) значениями составляет -4194304...

Вы знаете формат хранения чисел с плавающей точкой? мантисса*2^порядок. и мантисса, и порядок - числа фиксированной длины. И порядок у вас - весьма большой! При таких значения изменение одной цифры в мантиссе и даст вам такие разности. И поскольку мантисса - двоичная, а вводите вы число в десятичном виде - после преобразования, которое может проводится по разному, получаются такие эффекты. Если вам нужны точные значения - используйте тип decimal. а real можно сравнивать только по относительной разности, примерно как dow написал
25 май 09, 15:03    [7223487]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Winnipuh
Glory
Winnipuh

я снова выражаю свою просьбу: уймитесь со своим ничем не обоснованным высокомерным отношением

Доказывать, что 2х2 равно 5 - это тупость. Которая не зависит от чужой высокомерности


вы странный человек, видимо вы так самоутверждаетесь.

Вы пишете не совсем о том, о чем был задан вопрос, математик
Написано, есть таблица, в ней значения, и все что я вижу это то, что я привел выше.
Я присвоил такое же(!!) значение переменной и пытаюсь искать.

Круто. Я тоже присвоил в своей таблице значение как у вас. И получил в результатах вычислений 0.
Причем мой скрипт в отличии от вашего содержит конкренный insert, а не слова "у меня есть таблица, в которой есть данные". И кто тут тогда доказывает, что 2х2 дает разницу "в 4милиона" ?


так возможно в том и проблема:
я не знаю какие точно инсерты были, таблица с данными уже есть.
Все, что я могу сделать - это выбрать данные из таблицы.
Но выборка показывает мне числа типа таких 1.233435E+13, которые при сравнении с такими же (якобы) 1.233435E+13 не выбираются. Видиом есть значащие цифры, которые не показываются юзеру...
Юзер утверждает, что он ищет такое значение как видит, и не получает релаьной выборки.
Потому и задал вопрос, как бороться с подобными ситуациями....
25 май 09, 15:05    [7223503]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Glory
Member

Откуда:
Сообщений: 104760
Winnipuh

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

Ну вот когда сможете предоставить скрипт, который даст "разницу в 4млн." тогда и приходите
25 май 09, 15:12    [7223553]     Ответить | Цитировать Сообщить модератору
 Re: REAL - сравнение значений  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
вот уж я пользователям бы не доверял что они там навводили. и с совершенно честными глазами будут доказывать, что они не допустили ни одной ошибки.

плюс ко всему как может быть разница?
1,233435E+13
отображается у нас сколько знаков? 233435 итого 6, дальше 13-6 = 7, итого 7 знаков мы не видим. а там уже может быть что угодно, окок?

для спящего время бодрствования равносильно сну
25 май 09, 15:22    [7223630]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить