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
- 498
- 2
- 10
3 Answers
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);
}
- 27,121
-
Спасибо, вроде все правильно считает – Squeli47 Apr 15 '21 at 09:12
-
@Squeli47 * Отредактировано, с учетом случая, если tick - целое число. – OPTIMUS PRIME Apr 15 '21 at 09:22
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 знаков после запятой и возвращает строковое представление результата.
- 432
Проще всего так:
price.toFixed(tick.toString().split('.')[1].length);
- 511
- 3
- 7
-
(3.9553234).toFixed((0.02).toString().split('.')[1].length);→ строка"3.96", автор ожидает число3.94) – OPTIMUS PRIME Apr 15 '21 at 09:21