Сумма в поле VARCHAR преобразована в DECIMAL без добавления чисел после десятичного числа

Начиная с jQuery 1.7, вы должны использовать jQuery.fn.on :

$(staticAncestors).on(eventName, dynamicChild, function() {});

До этого рекомендуется использовать live() :

$(selector).live( eventName, function(){} );

Однако live() устарел в 1.7 в пользу on() и полностью удален в 1.9. Подпись live():

$(selector).live( eventName, function(){} );

... может быть заменена следующей on() сигнатурой:

$(document).on( eventName, selector, function(){} );

Например, если ваша страница динамически создавала элементы с именем класса dosomething, вы привязывали бы событие к родительскому, который уже существует (здесь есть нуль проблемы, вам нужно что-то, что существует для привязки, не привязка к динамическому контенту), это может быть (и самый простой вариант) - document. Хотя иметь в виду document, возможно, не самый эффективный вариант .

$(document).on('mouseover mouseout', '.dosomething', function(){
    // what you want to happen when mouseover and mouseout 
    // occurs on elements that match '.dosomething'
});

Любой родитель, который существует в момент привязки события, прекрасен. Например,

$('.buttons').on('click', 'button', function(){
    // do something here
});

применимо к

0
задан Lansana 28 March 2019 в 02:25
поделиться

3 ответа

Вы не используете тип данных DECIMAL в соответствии с вашим вариантом использования. DECIMAL(16, 16) объявляет десятичное число с 16 цифрами и с 16 десятичными цифрами. Это не может содержать значение больше, чем 1.

Рассмотрим:

SELECT CAST('1.12345678' AS DECIMAL(16, 16)) 

Возвращает: 0.9999999999999999.

Вы, вероятно, хотите что-то вроде DECIMAL(16, 8) вместо этого, так как ваши строки, кажется, имеют 8 десятичных знаков.


Из документации MySQL :

Синтаксис объявления для столбца DECIMAL - DECIMAL(M,D). Диапазоны значений аргументов следующие:

  • M - максимальное количество цифр (точность). Диапазон значений от 1 до 65.

  • D - это число цифр справа от десятичной точки (шкала). Он имеет диапазон от 0 до 30 и должен быть не больше чем M.

0
ответ дан GMB 28 March 2019 в 02:25
поделиться

Вы не должны использовать DECIMAL (16,16)

SELECT 100 * CAST('1.123' AS DECIMAL(16,16))

99,999 ...

SELECT 100 * CAST('1.123' AS DECIMAL(16, 10))

112,300 ...

0
ответ дан fifonik 28 March 2019 в 02:25
поделиться

Ответ GMB обычно является лучшим выбором, но если вам действительно нужно вывести (a_really_precise_number) * 100, вы можете сделать это на стороне приложения, фактически передав его в виде строки в язык, который поддерживает произвольно большие числа, а затем приведите его сторона приложения. Если в вашей базе данных есть числа более точные, чем 16 цифр, вы, вероятно, уже используете номер, который поддерживает это в вашем приложении.

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

Третий вариант, если вы просто умножаете его на степень 10, такую ​​как N * 100, и выводите результат, то передаете его в приложение в виде строки, а затем просто анализируете его, чтобы переместить десятичное число в 2 места, как это :

function shiftDec(str, shift){
  // split on decimal point
  var decPoint = str.indexOf(".");
  var decInt = str.substr(0, decPoint);
  var decMod = str.substr((decPoint+1));

  // move decimal 'shift' places to simulate N*100.
  if(shift > 0){
    var shiftCopy = decInt .substr(0,shift);
    decInt = decInt + shiftCopy;
    decMod = decMod .substr(shift);
  } else {
    var shiftCopy = decInt .substr((decInt.length + shift));
    decInt = decInt .substr(0,(decInt.length + shift));
    decMod = shiftCopy + decMod;
  }
  return decInt + '.' + decMod;
}
var result = shiftDec("1234567891234567.8912345678912345", 2);
document.write(result);
0
ответ дан Nosajimiki 28 March 2019 в 02:25
поделиться
Другие вопросы по тегам:

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