我要删除点后的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,以此类推。
答案 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);
}
尝试一下,它将解决您的问题:)