Tedious: рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рди рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 31 рдЕрдХреНрддреВре░ 2016  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: tediousjs/tedious

рдореИрдВ рдПрдХ рдРрд╕реЗ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдПрдХ рд╡реИрдз рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдореЗрд░реЗ рд╕рдореНрдорд┐рд▓рди рдХрдерди рдХреЛ рдХрдард┐рди рд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХрд░ рд░рд╣рд╛ рд╣реИред рдПрдХ рд╣реА рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдореИрдиреБрдЕрд▓ SQL рдЗрдВрд╕рд░реНрдЯ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдиреБрдЕрд▓ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ:

INSERT INTO foo (id, foo_id, timestamp, value, value2)  
VALUES ('ff3bd5e2-dbd8-424b-bb4f-455df1fe9f9c', 'b3a0a2c6-3b58-4659-8b4f-9466cede43be',  
        '2016-11-01T00:00:00+00:00', null, 66666.55);

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:

const bluebird = require('bluebird');
const sql = require('mssql');

const db = require('./database.js');

sql.Promise = bluebird;

const COLUMNS = {
  id: 'id',
  foo_id: 'foo_id',
  timestamp: 'timestamp',
  value: 'value',
  value2: 'value2'
};

exports.create = data => {
  return db.getConnection()
    .then(conn => {
      const ps = new sql.PreparedStatement(conn);
      ps.input(COLUMNS.id, sql.UniqueIdentifier);
      ps.input(COLUMNS.foo_id, sql.UniqueIdentifier);
      ps.input(COLUMNS.timestamp, sql.DateTimeOffset(0));
      ps.input(COLUMNS.value, sql.Numeric(30, 15));
      ps.input(COLUMNS.value2, sql.Numeric(30, 15));

      // Have to convert string to JavaScript date for insert to work
      data.timestamp = new Date(data.timestamp);
      const header = Object.keys(COLUMNS).map(key => COLUMNS[key]).join();

      const query = `INSERT INTO foo (${header}) VALUES (@${COLUMNS.id},` +
        ` @${COLUMNS.foo_id}, @${COLUMNS.timestamp}, @${COLUMNS.value},` +
        ` @${COLUMNS.value2})`;
      return ps.prepare(query)
        .then(() => ps.execute(data)
          // Releases the connection back to the pool
          .then(() => ps.unprepare()))
        .then(() => bluebird.resolve());
    });
};

рдердХрд╛рдК рдХреЛрдб 6666655000000000000 рдХреЗ рдорд╛рди рдХреЗ рд╕рд╛рде 66666.55 рдХреЛ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдЙрд╕ рдореВрд▓реНрдп рдХреЗ рд╢реЗрд╖ рдФрд░ рднрд╛рдЧрдлрд▓ рдХреЛ рд▓реЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд░рд╛рдЗрдЯрдпреВрдЗрдВрдЯ32рдПрд▓рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдлрд░ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред

рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░реЛрдВ рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдмрдлрд╝рд░реНрд╕ рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдмрдлрд╝рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд░рд╛рдЗрдЯрдбрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдердХрд╛рдК рдХреЛрдб рдХреНрдпреЛрдВ рд╣реИ?

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдореБрдЭреЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рд░реЛрдХ рд░рд╣реА рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ Numeric рдХреЛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ Tedious (Sequelize) рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЗрд╕ рддрд░рд╣ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рджрд╢рдорд▓рд╡ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИред рд╕рднреА рдирдВрдмрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

const value_stored = value.toFixed(desired_precision);

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХрд┐ рдЖрдк рд╕рдЯреАрдХрддрд╛ рдирд╣реАрдВ рдЦреЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдХреЛрдб рдФрд░ рдбреАрдмреА рдХреЗ рдмреАрдЪ рдХреБрдЫ рднреА рдирд╣реАрдВ рджрдмрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рдкреИрдорд╛рдиреЗ рдФрд░ рдкрд░рд┐рдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдзрд╛рд░рдгрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЬрд╛рдирддрд╛ рдпрд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдмреЗрд╢рдХ, рдпрд╣ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрдо рдмреИрдВрдбрд╡рд┐рдбреНрде рдХреБрд╢рд▓ рд╣реИ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ <30 рдмрд╛рдЗрдЯ рдкреНрд░рддрд┐ рд░рд┐рдХреЙрд░реНрдб рдЬреБрд░реНрдорд╛рдирд╛ рдорд╣рддреНрд╡рд╣реАрди рд╣реИред

рд╕рднреА 5 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░реЛрдВ рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдердХрд╛рдК рдХреЛрдб рдХреНрдпреЛрдВ рд╣реИ ...

рдХреНрдпреЛрдВрдХрд┐ рдЯреАрдбреАрдПрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдиреНрдпреВрдореЗрд░рд┐рдХ рд╡реИрд▓реНрдпреВ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИред
2.2.5.5.1.6 рджрд╢рдорд▓рд╡/рд╕рдВрдЦреНрдпрд╛рддреНрдордХ

sql.Numeric(30, 15) , _p_ 30 рд╣реИ, рдФрд░ _s_ 15 рд╣реИред рддреЛ рдкреВрд░реНрдгрд╛рдВрдХ 66666550000000000000 (66666.55 * 10^15) рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕реЗ 16 рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

https://github.com/tediousjs/tedious/blob/3cb8586c2be217d9b31ef72f866986d85614920d/src/data-type.js#L519

  ...
  buffer.writeUInt64LE(value);        // 8 bytes
  buffer.writeUInt32LE(0x00000000);   // 4 bytes
  buffer.writeUInt32LE(0x00000000);   // 4 bytes

рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИред

https://github.com/tediousjs/tedious/blob/master/src/tracking-buffer/writable-tracking-buffer.js#L125
рдХреЛрдИ Buffer.writeInt64LE рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рджреЛ 32 рдмрд┐рдЯ рд╡рд┐рдЦрдВрдбреВ рдореЗрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

 writeUInt64LE(value) {
    this.writeInt32LE(value & -1);
    return this.writeUInt32LE(Math.floor(value * SHIFT_RIGHT_32));
  }

32 рдмрд┐рдЯ рд░рд╛рдЗрдЯ рд╢рд┐рдлреНрдЯ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рд╕реНрд╡рдпрдВ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИред
Math.floor(66666550000000000000 * SHIFT_RIGHT_32) рд╕реЗ 15522015746 рдЬреЛ рдХрд┐ 0x39D2F2A02 ред рдЗрд╕рдХреЗ рд▓рд┐рдП 34 рдмрд┐рдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЕрдм рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ 66666550000000000000 0x39d2f2a02aed16000 рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП 64 рдмрд┐рдЯ рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЙрдард╛рддрд╛ рд╣реИ рдХрд┐ 53 рдмрд┐рдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд╛рд▓реЗ рд╕рднреА рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ _Number_ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд┐рд░ рдЦреБрдЬрд╛рдиреЗ рдФрд░ рдХреБрдЫ рдирдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ, рдЫреЛрдЯреЗ рдкреИрдорд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡рддрдГ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

@pekim рдореЗрд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП Node.js рдХреЗ рдмрдЬрд╛рдп рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВ рдЕрднреА рднреА рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЛрдИ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рди рдЪрд▓реЗред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ Numeric рдХреЛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ Tedious (Sequelize) рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЗрд╕ рддрд░рд╣ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рджрд╢рдорд▓рд╡ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИред рд╕рднреА рдирдВрдмрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

const value_stored = value.toFixed(desired_precision);

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХрд┐ рдЖрдк рд╕рдЯреАрдХрддрд╛ рдирд╣реАрдВ рдЦреЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдХреЛрдб рдФрд░ рдбреАрдмреА рдХреЗ рдмреАрдЪ рдХреБрдЫ рднреА рдирд╣реАрдВ рджрдмрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рдкреИрдорд╛рдиреЗ рдФрд░ рдкрд░рд┐рдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдзрд╛рд░рдгрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЬрд╛рдирддрд╛ рдпрд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдмреЗрд╢рдХ, рдпрд╣ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрдо рдмреИрдВрдбрд╡рд┐рдбреНрде рдХреБрд╢рд▓ рд╣реИ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ <30 рдмрд╛рдЗрдЯ рдкреНрд░рддрд┐ рд░рд┐рдХреЙрд░реНрдб рдЬреБрд░реНрдорд╛рдирд╛ рдорд╣рддреНрд╡рд╣реАрди рд╣реИред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ Numeric рдХреЛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ Tedious (Sequelize) рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЗрд╕ рддрд░рд╣ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рджрд╢рдорд▓рд╡ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИред рд╕рднреА рдирдВрдмрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

const value_stored = value.toFixed(desired_precision);

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХрд┐ рдЖрдк рд╕рдЯреАрдХрддрд╛ рдирд╣реАрдВ рдЦреЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдХреЛрдб рдФрд░ рдбреАрдмреА рдХреЗ рдмреАрдЪ рдХреБрдЫ рднреА рдирд╣реАрдВ рджрдмрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рдкреИрдорд╛рдиреЗ рдФрд░ рдкрд░рд┐рдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдзрд╛рд░рдгрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЬрд╛рдирддрд╛ рдпрд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдмреЗрд╢рдХ, рдпрд╣ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрдо рдмреИрдВрдбрд╡рд┐рдбреНрде рдХреБрд╢рд▓ рд╣реИ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ <30 рдмрд╛рдЗрдЯ рдкреНрд░рддрд┐ рд░рд┐рдХреЙрд░реНрдб рдЬреБрд░реНрдорд╛рдирд╛ рдорд╣рддреНрд╡рд╣реАрди рд╣реИред

рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ред

рдХреНрдпрд╛ рдЗрд╕реЗ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд░ рдмрд╛рд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рджрд╢рдорд▓рд╡ рдорд╛рди рдбрд╛рд▓рдиреЗ/рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕реЗ .toFixed(2) рдХрд╣рддреЗ рд╣реИрдВ?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

diginfo picture diginfo  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

GuyHarwood picture GuyHarwood  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yianni-ververis picture yianni-ververis  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

spacem picture spacem  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

aniltomar10 picture aniltomar10  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ