0

var tick = 0.0001;
var price = 12.94356341;
// 12.9435

var tick = 0.001; var price = 457.446232; // 457.446

var tick = 0.02; var price = 3.9553234; // 3.94

Squeli47
  • 498
  • 2
  • 10

3 Answers3

3
457.446232 / 0.001   → 457446.232
parseInt(457446.232) → 457446
457446 * 0.001       → 457.446

console.log( bubu(12.94356341, 0.0001) ); // 12.9435
console.log( bubu(457.446232, 0.001) ); // 457.446
console.log( bubu(3.9553234, 0.02) ); // 3.94

console.log( bubu(457.446232, 0.0027) ); // 457.44480000000004 (упс?)

function bubu(price, tick) { return parseInt(price / tick) * tick; }

Для решения последней » проблемы «, можно дополнительно отрезать число, оставив столько знаков после запятой, сколько было у tick.

console.log( bubu(457.446232, 0.0027) ); // 457.4448
console.log( bubu(57.4, 17) ); // 51

function bubu(price, tick) {
let prec = (String(tick).split('.')[1] || '').length; // кол-во цифр после точки. // || '' пустая строка предусмотрена на случай, если tick - целое число.

let x = ( parseInt(price / tick) * tick ).toFixed(prec); // *toFixed возвращает строку

return Number(x); }

OPTIMUS PRIME
  • 27,121
1

var tick = 0.0001;
var price = 12.94356341;
// 12.9435

var tick = 0.001; var price = 457.446232; // 457.446

var tick = 0.02; var price = 3.9553234; // 3.94

alert(magic(tick, price))

function magic(step, number){ return(price.toFixed(step.toString().split('.')[1].length)) }

непонятно, правда, как 3.95 после "обрезания" превратилось в 3.94

Метод toFixed(n) округляет число до n знаков после запятой и возвращает строковое представление результата.

Paprika
  • 432
1

Проще всего так:

price.toFixed(tick.toString().split('.')[1].length);
Samoedy
  • 511
  • 3
  • 7
  • (3.9553234).toFixed((0.02).toString().split('.')[1].length); → строка "3.96", автор ожидает число 3.94 ) – OPTIMUS PRIME Apr 15 '21 at 09:21