in src/internal/BinaryCommunicator.ts [331:361]
_writeDecimal(buffer, decimal) {
let strValue = decimal.toExponential();
let expIndex = strValue.indexOf('e');
if (expIndex < 0) {
expIndex = strValue.indexOf('E');
}
let scale = 0;
if (expIndex >= 0) {
scale = parseInt(strValue.substring(expIndex + 1));
strValue = strValue.substring(0, expIndex);
}
const isNegative = strValue.startsWith('-');
if (isNegative) {
strValue = strValue.substring(1);
}
const dotIndex = strValue.indexOf('.');
if (dotIndex >= 0) {
scale -= strValue.length - dotIndex - 1;
strValue = strValue.substring(0, dotIndex) + strValue.substring(dotIndex + 1);
}
scale = -scale;
let hexValue = new Decimal(strValue).toHexadecimal().substring(2);
hexValue = ((hexValue.length % 2 !== 0) ? '000' : '00') + hexValue;
const valueBuffer = Buffer.from(hexValue, 'hex');
if (isNegative) {
valueBuffer[0] |= 0x80;
}
buffer.writeInteger(scale);
buffer.writeInteger(valueBuffer.length);
buffer.writeBuffer(valueBuffer);
}