Javascript 四舍五入到3位数不起作用?

Javascript 四舍五入到3位数不起作用?,javascript,html,css,math,rounding,Javascript,Html,Css,Math,Rounding,我正在检查imageData中的一定数量的随机像素,以获得黑白比。当我使用 Math.round(num * Math.pow(10, decimalPlace)) / Math.pow(10, decimalPlace); 公式将数字设为3位数,有时输出类似于“7.500000003%”。有人能解释一下吗?顺便说一句,num.toFixed(decimalPlaces)不是我想要的,因为有时候我会有一个像“77.5123123”这样的输出,这个函数会变成“77.512”。我想谈谈三个重要数字

我正在检查imageData中的一定数量的随机像素,以获得黑白比。当我使用

Math.round(num * Math.pow(10, decimalPlace)) / Math.pow(10, decimalPlace);
公式将数字设为3位数,有时输出类似于“7.500000003%”。有人能解释一下吗?顺便说一句,num.toFixed(decimalPlaces)不是我想要的,因为有时候我会有一个像“77.5123123”这样的输出,这个函数会变成“77.512”。我想谈谈三个重要数字

片段中的标签有点奇怪,不知道为什么代码片段:
var-can、ctx、w、h、box=[]
;
window.onload=函数(){
can=document.getElementById(“can”);ctx=can.getContext(“2d”);
can.width=w=window.innerWidth;can.height=h=window.innerHeight;
风险价值金额=3;
对于(变量i=1;i
canvas{背景:rgb(50,50,50);}

正如评论中所指出的,之所以会出现这个问题,是因为JavaScript中的
数字
是标准的浮点基2值,精确的基10分数几乎永远不能表示为精确的基2分数(除了少数例外,如
0.5
0.25
)。这意味着,即使四舍五入后,你的值也不是你想要的,也不可能是你想要的。一种解决方案是使用实现“十进制”浮点数或固定点数的库。但出于您的目的,您可能可以使用返回

以定点或指数表示法表示
数字
对象的字符串,四舍五入为
精度
有效数字

更新的演示:

var-can、ctx、w、h、box=[]
;
window.onload=函数(){
can=document.getElementById(“can”);ctx=can.getContext(“2d”);
can.width=w=window.innerWidth;can.height=h=window.innerHeight;
风险价值金额=3;
对于(变量i=1;i
canvas{背景:rgb(50,50,50);}

正如评论中所指出的,之所以会出现这个问题,是因为JavaScript中的
数字
是标准的浮点基2值,精确的基10分数几乎永远不能表示为精确的基2分数(除了少数例外,如
0.5
0.25
)。这意味着,即使四舍五入后,你的值也不是你想要的,也不可能是你想要的。一种解决方案是使用实现“十进制”浮点数或固定点数的库。但出于您的目的,您可能可以使用返回

以定点或指数表示法表示
数字
对象的字符串,四舍五入为
精度
有效数字

更新的de