Трейлинг, если после точки все значения являются нулями в Javascript - PullRequest
0 голосов
/ 21 января 2019

Я хочу удалить 0s после точки

Я использую SQL с Laravel, в базе данных цены хранятся с использованием десятичной дроби (10,3) [Мне нужно 3 десятичных знака].

Из базы данных я получаю

400.000
451.500
1.522
20.000
300.210
143.100

I 'мы пытались выполнить parseFloat и toFixed (3), но это не работает так, как я ожидал.

Я ожидаю, что результат будет:

400
451.500
1.522
20
300.210
143.100

Значения не из массива.Я получаю значение из ответа AJAX.Я нажимаю на кнопку и получаю 400.000, нажимаю снова .. Я получаю в ответ 451.500 и т. Д.

Ответы [ 4 ]

0 голосов
/ 21 января 2019

var number = 1.2345678;
var result_number = round(number, 3);
console.log(result_number);
function round(value, decimals) {
    return Number(Math.round(value + 'e' + decimals) + 'e-' + decimals);
}

Попробуйте, и это решит вашу проблему:)

0 голосов
/ 21 января 2019

Для простоты я превратил ваши значения в массив, однако, как вы перебираете значения, зависит от вас; вот концепция:

let arr = [400.000, 451.500, 1.522, 20.000, 300.210, 143.100]

    for(let x = 0; x < arr.length; x++) {
        if(arr[x] % 1 == 0) {
            arr[x] = arr[x].toFixed(0);
        }
        else {
            arr[x] = arr[x].toFixed(3);
        }
        console.log(arr[x])
    }

Для этого проверяется значение, чтобы определить, делится ли оно на 1, и возвращается без десятичных знаков, в противном случае оно округляется до 3 десятичных знаков.

Надеюсь, это помогло!

0 голосов
/ 21 января 2019

Вы можете использовать регулярное выражение, чтобы проверить, все ли цифры после \. равны нулю или нет.

Если ноль, то заменить на пустую строку, иначе оставить как есть.

const data = ['400.000', '451.500', '1.520', '20.000', '300.210', '143.001']

const res = data.map(n=>{
  return n.replace(/\.0+$/, "");
});

console.log(res);
0 голосов
/ 21 января 2019

Использование фильтра Array # и String # replace.Работает путем сопоставления только 0 после точки.

/\.0+$/ - это простое регулярное выражение.Это может быть разбито на несколько разных частей.Внешние / s (косые черты) указывают на то, что внутри него есть регулярное выражение.

Важная часть на самом деле \.0+$.По умолчанию . будет соответствовать любому символу, но в этом сценарии мы просто хотим найти числа, содержащие точку.Таким образом, мы escape делаем это, используя \..

Как только у нас есть числа, которые содержат точку, нам нужно посмотреть, содержат ли они один или несколько нулей и только 0.

0+ будет соответствовать как минимум одному или нескольким 0.

$ гарантирует, что число оканчивается на 0.

tldr; По существу.\.0+$ будет соответствовать всему, что содержит . и имеет по крайней мере один трейлинг 0 и заканчивается 0.

const data = ['123.001','400.000', '451.500', '1.520', '20.000', '300.210', '143.100']

const res = data.map(n=>{
  return n.replace(/\.0+$/, "");
});

console.log(res);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...