0

У меня есть MySQL хранимой процедуры, где у меня есть эта формула -Математическая формула возвращения неправильные значения в MySQL хранимой процедуры

chamt = CEIL ((сумма - (сумма * ((в процентах/100) * Запас)/100)) * 100)/100;

(я размножались и разделить формулу на 100 таким образом, чтобы получить два десятичных разряда всегда)


Случай 1 - подставляя значения -

chamt = CEIL ((103,00 - (103,00 * ((100,00/100) * 2,70)/100)) * 100)/100;

Здесь я получаю chamt как 100.22, что абсолютно правильно.


Случай 2 - Подставляя значения -

chamt = CEIL ((200,00 - (200,00 * ((100,00/100) * 2,25)/100)) * 100)/100;

Здесь я получаю chamt, как 195.51 в то время как она должна быть 195,50


Я пытаюсь выйти из этого, но не может получить правильное значение в «Случае 2». Члены, пожалуйста, помогите мне.

+1

Он работает так, как ожидается, на моем локальном сервере – sectus

+0

может показать нам всю хранимую процедуру, возможно, значения для 'amount',' percent' и 'margin' не так, как кажутся. –

+0

@sectus Это работает и на локальном сервере для меня, но не в живой среде. –

ответ

0

Помните, что при работе с номерами реального типа он работает с десятичными знаками.

Вы знаете, что 1/3 = 0,3333333333 ...

А (1/3) * 3 = 1 (для вас); Но помните, что ПК не работают с 1/3, они используют 0.3333333, , поэтому, когда вы делаете умножение (1/3) * 3, компьютер делает это: (0.333333333) * 3, и это дает вам 0.9999999 ,

И 0,9999! = 1.

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

+0

Aerojun, даже если я применил вашу логику, я должен получить 195,50 в случае 2. Я думаю, что мы больше не хотим! –

+0

@shailendra да, это называется [IEEE 754] (http://en.wikipedia.org/wiki/IEEE_floating_point) – sectus

+0

Затем вы нарушили MySQL :((jk). Я завтра проведу формулу, мне нужно спать – aerojun

Смежные вопросы