尾随点是否在Javascript中所有值均为零

时间:2019-01-21 19:14:01

标签: javascript regex

我要删除点后的0s

我在Laravel中使用SQL,在数据库中,价格使用小数(10,3)[我需要3个小数]存储。

我从数据库中获取

400.000
451.500
1.522
20.000
300.210
143.100

我已经尝试执行parseFloat和toFixed(3),但是按我的期望却无法正常工作。

我希望输出为:

400
451.500
1.522
20
300.210
143.100

这些值不是来自数组。我从AJAX响应中获取价值。我单击一个按钮,得到400.000,再次单击。.我得到451.500,以此类推。

4 个答案:

答案 0 :(得分:0)

使用Array#filter和String#replace。通过在点后仅匹配0来工作。

/\.0+$/是简单的正则表达式。它可以分为几个不同的部分。外面的/(斜杠)表示其中的任何内容都是正则表达式。

重要的部分实际上是\.0+$。默认情况下,.将匹配任何字符,但是在这种情况下,我们只想查找包含点的数字。因此,我们使用escape \.

一旦我们有了一个包含点的数字,我们需要查看它们是否包含一个或多个0,只有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);

答案 1 :(得分:0)

为简单起见,我将您的值转换为数组,但是如何迭代这些值由您决定;这是概念:

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位。

希望这对您有帮助!

答案 2 :(得分:0)

您可以使用正则表达式检查\.之后的所有数字是否为零。

如果为零,则替换为空字符串,否则保持原样。

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);

答案 3 :(得分:0)

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);
}

尝试一下,它将解决您的问题:)