Как выбрать десятичное число из столбца float mySQL [дубликат]

Сначала вы не можете избежать обратного преобразования кода. Байт-код JVM должен быть простым для выполнения, и есть несколько программ для его обратной инженерии (то же самое относится к .NET CLR). Вы можете только сделать все труднее поднять барьер (т. Е. Стоимость), чтобы видеть и понимать ваш код.

Обычный способ - обфускать источник с помощью какого-либо инструмента. Классы, методы и поля переименовываются на протяжении всей кодовой базы, даже с недопустимыми идентификаторами, если вы решите, что делает код, который невозможно понять. У меня были хорошие результаты с JODE в прошлом. После обфускации используйте декомпилятор, чтобы увидеть, как выглядит ваш код ...

Рядом с обфускацией вы можете с помощью некоторого метода шифровать файлы классов (все, кроме небольшого стартового класса), и использовать специальный загрузчик классов для расшифровки их. К сожалению, класс загрузчика классов не может быть зашифрован сам, поэтому люди могут определить алгоритм дешифрования, прочитав декомпилированный код вашего загрузчика классов. Но окно для атаки вашего кода стало меньше. Опять же, это не мешает людям видеть ваш код, просто делает его труднее для случайного злоумышленника.

Вы также можете попробовать конвертировать приложение Java в некоторые окна EXE, которые скроют ключ, что это Java вообще (в некоторой степени) или действительно скомпилировать в машинный код, в зависимости от вашей потребности в JVM-функциях. (Я не пробовал это.)

22
задан Gumbo 19 August 2009 в 20:52
поделиться

8 ответов

Кастинг для десятичной дроби работал для меня:

SELECT * FROM table WHERE CAST(price AS DECIMAL) = CAST(101.31 AS DECIMAL);

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

37
ответ дан Matt Solnit 19 August 2018 в 03:21
поделиться
  • 1
    Примечание: используйте DECIMAL(M,D). CAST(101.31 AS DECIMAL) = 101 – Karoly Horvath 24 October 2012 в 16:39

Это не работает, потому что поплавок по своей сути является неточным. Фактическое значение, вероятно, похоже на «101.3100000000001». Сначала вы можете использовать ROUND () для округления до 2-х мест или лучше использовать тип DECIMAL вместо float.

11
ответ дан Eric Petroelje 19 August 2018 в 03:21
поделиться

Я искал решение, но, наконец, я сделал это, используя мой предыдущий php number_format (), который появился в решении @ hmasif's.

Используйте это, и вы получите свое совпадение с float-mysql:

$floatmatch = number_format((float)$yourfloatvariable,5);

где 5 - пять строк из десятичной точки. например 7,93643

7
ответ дан FrankerZ 19 August 2018 в 03:21
поделиться

Никогда не используйте поплавки за деньги.

8
ответ дан jcdyer 19 August 2018 в 03:21
поделиться
  • 1
    Откуда мне получить изменения для клиента? (извините, немного лавочника юмора там :) – Meep3D 19 August 2009 в 22:10

Возможно, что-то вроде этого:

SELECT * FROM table WHERE ident='ident23' AND ABS(price - 101.31) < .01;
-1
ответ дан LorenVS 19 August 2018 в 03:21
поделиться

Это работает?

SELECT * , ROUND( price, 2 ) rounded
FROM table
WHERE ident = 'ident23'
HAVING rounded = 101.31
-1
ответ дан Mark L 19 August 2018 в 03:21
поделиться
7
ответ дан FrankerZ 30 October 2018 в 15:03
поделиться
0
ответ дан Gerson Diniz 30 October 2018 в 15:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: