将字符串修剪到两位小数

时间:2019-12-08 14:41:12

标签: javascript string rgb trim

我有一个这样的字符串:rgba(244.235, 3.234, 3.236, 0.84839234)

如何将最后一个数字的字符串修整到小数点后两位(0.84),并删除小数点后的所有内容?

例如:

rgba(244.235, 3.234, 3.236, 0.84839234)

应该是:

rgba(244, 3, 3, 0.84)

4 个答案:

答案 0 :(得分:3)

您可以使用正则表达式查找所需的数字,然后重建字符串:

function convert(inputStr) {
  const groups = inputStr.match(/\((?<r>[\d]*).*, ?(?<g>[\d]*).*, ?(?<b>[\d]*).*, ?(?<a>[\d]*\.?\d{0,2}).*\)/).groups;
  return `rgba(${groups.r}, ${groups.g}, ${groups.b}, ${groups.a})`;
}
// Function call
convert("rgba(244.235, 3.234, 3.236, 0.84839234)");

答案 1 :(得分:1)

您可以执行以下操作:

var string = "rgba(244.235, 3.234, 3.236, 0.84839234)";
var numbers = string.match(/([0-9]*[.])?[0-9]+/g).map(Number); 

然后在numbers数组中将有这些数字,您可以使用它们进行任何操作。首先进行操作,然后将它们连接到所需的字符串中。

例如:

var newString = `rgba(${Math.floor(numbers[0])}, ${Math.floor(numbers[1])}, ${Math.floor(numbers[2])}, ${numbers[3].toFixed(2)})`

我希望这会有所帮助。

答案 2 :(得分:0)

如果您要尝试不使用正则表达式,则...

const string = "rgba(244.235, 3.234, 3.236, 0.84839234)";
const rgbaValues = string.substring(string.indexOf('(') + 1, string.length - 1).split(",");
const returnString = `rgba(${parseInt(rgbaValues[0])}, ${parseInt(rgbaValues[1])}, ${parseInt(rgbaValues[2])}, ${parseFloat(rgbaValues[3]).toFixed(2)})`;
console.log(returnString);

答案 3 :(得分:0)

要修剪一些小数位数,请使用toFixed。例如

Math.PI;
//=> 3.141592653589793
Math.PI.toFixed(2)
//=> "3.14"

要替换字符串的一部分,请使用replace。例如

const reverse_cc = str =>
  str.replace(/(\d+)-(\d+)-(\d+)-(\d+)/g,
    (ignore, x1, x2, x3, x4) =>
      `${x4}-${x3}-${x2}-${x1}`);

reverse_cc("Hey this is my credit card number: 1234-2345-3456-4567");
//=> "Hey this is my credit card number: 4567-3456-2345-1234"

借助这些知识,我们可以构建一个函数来提取rgba(...)字符串中的数字,处理这些数字并返回新的字符串:

const rgba_fix = str =>
  str.replace(/rgba\(\s*(.*?)\s*,\s*(.*?)\s*,\s*(.*?)\s*,\s*(.*?)\s*\)/,
    (ignore, x1, x2, x3, x4) =>
      Array.of(
        [ Math.round(Number(x1))
        , Math.round(Number(x2))
        , Math.round(Number(x3))
        , Number(x4).toFixed(2)
        ])
      .map(xs => `rgba(${xs.join(', ')})`)
      [0]);

rgba_fix('rgba(244.235, 3.234, 3.236 , 0.84839234)');
//=> "rgba(244, 3, 3, 0.85)"