如何使用此 js svg 解析器将 svg 文件或元素中的路径小数位更改为 n 位小数

How to use this js svg parser to change the path's decimal places in an svg file or element to n decimals?

本文关键字:小数 svg 路径 元素 js 何使用 文件      更新时间:2023-09-26

有一个svg解析器,它很少做svg优化,包括更改svg路径的小数位。 如果您使用 snap SVG 并创建一个路径元素:

var paper = Snap("100%","100%").attr({"viewbox":"0,0,500,600"});
var pth = paper.path("M89.86111111111111,140.00000000000003C89.30555555555556,138.61111111111114,88.61111111111111,137.6388888888889,87.63888888888889,136.94444444444446C86.66666666666667,136.25000000000003,85.55555555555556,135.97222222222223,84.58333333333334,135.97222222222223C83.33333333333334,135.97222222222223,82.22222222222223,136.25000000000003,81.38888888888889,136.80555555555557C80.55555555555556,137.36111111111114,79.86111111111111,138.19444444444446,79.30555555555556,139.16666666666669C78.75,140.1388888888889,78.33333333333333,141.25000000000003,78.05555555555556,142.50000000000003C77.77777777777777,143.75000000000003,77.77777777777777,145.00000000000003,77.77777777777777,146.25000000000003C77.77777777777777,147.6388888888889,77.91666666666667,148.8888888888889,78.19444444444444,150.1388888888889C78.47222222222223,151.3888888888889,79.02777777777777,152.50000000000003,79.58333333333333,153.47222222222223C80.13888888888889,154.44444444444446,80.83333333333334,155.1388888888889,81.66666666666667,155.69444444444446C82.5,156.25000000000003,83.61111111111111,156.5277777777778,84.72222222222223,156.5277777777778C86.11111111111111,156.5277777777778,87.22222222222223,155.97222222222223,88.05555555555556,155.1388888888889C88.88888888888889,154.30555555555557,89.44444444444444,153.33333333333334,89.86111111111111,152.36111111111114M71.11111111111111,146.25000000000003C71.11111111111111,148.8888888888889,71.38888888888889,151.3888888888889,72.08333333333333,153.61111111111114C72.77777777777777,155.83333333333334,73.75,157.7777777777778,75,159.30555555555557C76.25,160.83333333333334,77.5,162.08333333333334,79.16666666666667,162.91666666666669C80.69444444444444,163.75000000000003,82.36111111111111,164.30555555555557,84.16666666666667,164.30555555555557C85.83333333333334,164.30555555555557,87.63888888888889,163.8888888888889,89.16666666666667,163.05555555555557C90.69444444444444,162.22222222222223,91.94444444444444,160.97222222222223,93.19444444444444,159.44444444444446C94.44444444444444,157.91666666666669,95.41666666666667,155.97222222222223,96.11111111111111,153.75000000000003C96.80555555555556,151.5277777777778,97.22222222222223,149.0277777777778,97.22222222222223,146.25000000000003C97.22222222222223,143.75000000000003,96.94444444444444,141.3888888888889,96.25,139.30555555555557C95.55555555555556,137.22222222222223,94.72222222222223,135.2777777777778,93.47222222222223,133.61111111111114C92.22222222222223,131.94444444444446,90.83333333333334,130.83333333333334,89.30555555555556,129.86111111111114C87.77777777777777,128.8888888888889,85.97222222222223,128.47222222222223,84.16666666666667,128.47222222222223C82.36111111111111,128.47222222222223,80.69444444444444,128.8888888888889,79.02777777777777,129.86111111111114C77.36111111111111,130.83333333333334,76.11111111111111,131.94444444444446,74.86111111111111,133.61111111111114C73.61111111111111,135.2777777777778,72.77777777777777,137.08333333333334,72.08333333333333,139.30555555555557C71.38888888888889,141.5277777777778,71.11111111111111,143.75000000000003,71.11111111111111,146.25000000000003");
console.log(pth.toString()); 

如何使用上面链接的 svg 解析器或使用 js 的任何其他方式将这些小数位减少到 n 位小数?

更新:谢谢@Ian。使用您的代码,如果有任何小数,我们如何使用以下代码进行舍入?

 if (dec || dec === 0)
    {
      if (dec > 1) dec = 1;
      else if (dec < 0) dec = 0;
    }
    else dec = false;
    function r(num)
    {
if (dec !== false) return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
      else return num;
    }

你可以使用一些像这样的正则表达式...我认为这将四舍五入并切断...

var newstring = string.replace(/[0-9]*'.[0-9]*/g, function(x){ return (+x).toFixed(2)  });

然后,您可以在路径d属性等任何地方应用它

斯菲德尔