Обрезать с плавающей точкой (не округлено) до 2 десятичных знаков - PullRequest
0 голосов
/ 25 апреля 2020

Пожалуйста, мне нужно конвертировать String в Float или Double in Javascript. Но я не хочу, чтобы это было вокруг. Я хочу только фиксированные 2 десятичных знака Число , что означает ввод 0.996 , верните мне 0.99 , а не 1.

// 1. Convert number to float strip to 2 decimal places
var total = ',996' // (or 0.996 if you want, doesn't matter)
total = Math.round(parseFloat(
                   total.replace (',', '.')
)).toFixed(2);

console.log ( typeof total );
console.log ( total );

После этого total больше не число. Это строка со значением 1

Возможно ли преобразовать строку в десятичное число с двумя фиксированными разрядами без округления?

Если вас интересует простой менеджер потраченных средств, я программирую его здесь https://codepen.io/littleTheRabbit/pen/JjYWjRG

Большое спасибо за любые советы

С наилучшими пожеланиями

1 Ответ

1 голос
/ 25 апреля 2020

Это можно сделать, отбросив лишние цифры, которые вы не хотите, используя умножение и деление. Например, если вы хотите, чтобы 0,994 было 0,99, вы можете умножить на 100 (чтобы покрыть 2 десятичных знака), затем обрезать число и затем разделить его обратно на 100 до исходного десятичного знака.

пример:

  0.994 * 100 = 99.4
  99.4 truncated = 99.0
  99.0 / 100 = 0.99

Итак, вот функция, которая сделает это:

const truncateByDecimalPlace = (value, numDecimalPlaces) =>
  Math.trunc(value * Math.pow(10, numDecimalPlaces)) / Math.pow(10, numDecimalPlaces)

console.log(truncateByDecimalPlace(0.996, 2)) // 0.99
...