Size: a a a

2021 September 10

IZ

Ilia Zviagin in MySQL
UPDATE book as b
left JOIN supply as s on s.XXXX = b.XXXX
SET
   b.amount = b.amount + coalesce(s.amount,0),
   b.price = (b.price + coalesce(s.price,b.price))/2


Но вот этих самыйх XXX у тебя и нету, у тебя нет внешнего ключа BOOK в SUPPLY
источник

S

Syntax Highlight Bot in MySQL
источник

БН

Борис Новиков... in MySQL
доброго дня.
источник

БН

Борис Новиков... in MySQL
подскажите, в каком формате лучше хранить числа вида:
0.452804505052295
источник

АД

Александр Дементьев... in MySQL
decimal, наверн
источник

L

LiFeAiR in MySQL
Бигинт
источник

IZ

Ilia Zviagin in MySQL
число дробное, какой int ?
источник

IZ

Ilia Zviagin in MySQL
decimal или float
источник

L

LiFeAiR in MySQL
Умножаем на количество символов после запятой
Вот вам и интеджер
источник

DE

Denis Efremov in MySQL
И какой длины целое ты можешь хранить?
источник

DE

Denis Efremov in MySQL
Не float
источник

DE

Denis Efremov in MySQL
У DECIMAL пофикшен всем известный баг расчетов чисел с плавающей точкой
источник
2021 September 11

D

Dmitriy in MySQL
Ну если речь про хранение денег, то почему бы и нет? Частая практика, когда так делают - много раз сталкивался
источник

G

Grigorij in MySQL
Ну, деньги обычно а минорных единицах просто хранят
источник

G

Grigorij in MySQL
А дальнейшие конвертации хорошо продумывают
источник

DE

Denis Efremov in MySQL
Сам так делал. Увы большинство ЯП не позволяет точно считать дробные
источник

DE

Denis Efremov in MySQL
А запятую подставлял и убирал работой со строками
источник

DE

Denis Efremov in MySQL
На самом деле это просто считать копейки а не рубли
источник

DE

Denis Efremov in MySQL
Да я тут постил в чат эти продумки
источник

DE

Denis Efremov in MySQL
js
/**
* To quants satoshi, wei, etc...
*
* @param {Number|String|BN} value
* @return {String}
*/
export function toMinimal (value, decimal) {
 if (typeof decimal !== 'number') {
   throw new TypeError('toMinimal error: decimal is not a number')
 }

 // hook for modify value like 1e-8
 if (value.toString().indexOf('e') > 0) {
   const valueParts = String(value).match(/^([\d.]+)e-?(\d+)$/)

   value = `0.${new Array(parseInt(valueParts[2], 10)).join('0')}${valueParts[1].replace('.', '')}`
 }

 const [integerPart, fractionPart = ''] = value.toString().split(/[,.]/)
 const paddedFraction = fractionPart.length < decimal
   ? fractionPart.padEnd(decimal, '0')
   : fractionPart.substr(0, decimal)
 const result = `${integerPart}${paddedFraction}`.replace(/^0+/, '')

 if (result === '') {
   return '0'
 }

 return result
}

/**
* To currency unit.
*
* @param {String|Number|BN} value
* @return {String}
*/
// eslint-disable-next-line no-shadow
export function toCurrency (value, decimal) {
 if (typeof value === 'string') {
   if (value.indexOf('.') !== -1) {
     throw new Error(`${value} must not contain '.'`)
   }
   if (value.indexOf('-') !== -1) {
     throw new Error(`${value} must not contain '-'`)
   }
   if (typeof decimal !== 'number') {
     throw new TypeError('toCurrency error: decimal is not a number')
   }
 }

 const valueBN = new BN(value)

 if (valueBN.lte(0)) {
   throw new Error('negative')
 }
 const valueString = new BN(value).toString()

 const integerPart = valueString
   .substring(0, valueString.length - decimal)
   .replace(/^0+/, '') || 0

 const fractionPart = valueString.substring(valueString.length - decimal)
   .padStart(decimal, '0')
   .replace(/0+$/, '')

 if (fractionPart.search('-') !== -1) {
   console.warn('convert: toCurrency: fractionPart is bad')
 }

 if (fractionPart !== '') {
   return `${integerPart}.${fractionPart}`
 }

 return `${integerPart}`
}
источник