Css 比例越低,效果越好

Css 比例越低,效果越好,css,less,Css,Less,我想在lesscss文件中以2位数的准确率获取百分比。 在lesscss文件中 @w: round(((100-((12-5)*3.8))/(12/5))*100); width: percentage(@w/10000); 编制至宽度:30.580000000000002%; 我做错了什么 我的逻辑很简单: 步骤1:获取“不正确”数字30.580000000000002 步骤二:30.580000000000002*100=3058.0000000000002 第三步:四舍五入(3058.0

我想在lesscss文件中以2位数的准确率获取百分比。 在lesscss文件中

@w: round(((100-((12-5)*3.8))/(12/5))*100);
width: percentage(@w/10000);
编制至宽度:30.580000000000002%; 我做错了什么

我的逻辑很简单:
步骤1:获取“不正确”数字30.580000000000002
步骤二:30.580000000000002*100=3058.0000000000002
第三步:四舍五入(3058.0000000000002)=3058
步骤4:3058/10000=0.3058

步骤5:percentage(0.3058)=30.58

您需要将
round()
方法包装在
percentage()
方法周围,如下所示:

@w: round(((100-((12-5)*3.8))/(12/5))*100);
width: round(percentage(@w/10000));

您需要将
round()
方法包装在
percentage()
方法周围,如下所示:

@w: round(((100-((12-5)*3.8))/(12/5))*100);
width: round(percentage(@w/10000));

您没有考虑浮点计算是在二进制中完成的,在二进制中没有1/10000的精确表示。因此:

/* 30.580000000000002 */
console.log(Math.round(((100 - ((12 - 5) * 3.8))/(12 / 5)) * 100) / 10000 * 100);
(只要计算基于双精度浮点数,LESS是否使用JavaScript等ECMAScript实现并不重要。)

然而,你不应该为此烦恼

width: 30.580000000000002%;

是。

您没有考虑浮点计算是在二进制中完成的,在二进制中没有1/10000的精确表示。因此:

/* 30.580000000000002 */
console.log(Math.round(((100 - ((12 - 5) * 3.8))/(12 / 5)) * 100) / 10000 * 100);
(只要计算基于双精度浮点数,LESS是否使用JavaScript等ECMAScript实现并不重要。)

然而,你不应该为此烦恼

width: 30.580000000000002%;

是。

在尽量减少数据流量时,您的问题可能很重要。现在,通过网络发送CSS百分比时,数据中包含一个或两个以上的数字

考虑到以下较少的投入:

w: 100 %;
w: round(512 * 1%, 2);
w: 2.0 / 3.0 * 100 * 1%;
w: round(2.0 / 3.0 * 100 * 1%, 2);
w: round(0.19%, 2);
w: round(0.19%, 1);
w: round(10000%, 1);
w: round(10000, 1);
和相应的输出:

w: 100 %;
w: 512%;
w: 66.66666666666666%;
w: 66.67%;
w: 0.19%;
w: 0.2%;
w: 10000%;
w: 10000;

我们看到,
round(百分比,2)
以非破坏性方式实现了我们想要的功能。

在尝试最小化数据流量时,您的问题可能很重要。现在,通过网络发送CSS百分比时,数据中包含一个或两个以上的数字

考虑到以下较少的投入:

w: 100 %;
w: round(512 * 1%, 2);
w: 2.0 / 3.0 * 100 * 1%;
w: round(2.0 / 3.0 * 100 * 1%, 2);
w: round(0.19%, 2);
w: round(0.19%, 1);
w: round(10000%, 1);
w: round(10000, 1);
和相应的输出:

w: 100 %;
w: 512%;
w: 66.66666666666666%;
w: 66.67%;
w: 0.19%;
w: 0.2%;
w: 10000%;
w: 10000;

我们看到
四舍五入(百分比,2)
非破坏性地实现了我们想要的。

我需要以两位数的精度对其进行四舍五入。如果我将百分比四舍五入-就不会了。只需将(百分比(@w/100))*0.01进行四舍五入即可。@EdD不起作用(总是),因为在1/100的二进制中也没有精确的表示。可以使用
百分比((…).toFixed(4))
,假设任意ECMAScript代码可以在更少的时间内使用。但是,在某些实现中它可能会中断,请参见。@AlexW
round(…)
将始终舍入为整数,而不是OP想要的小数点后2位。我怀疑这个问题能在更少的时间内得到解决。@EdD事实上,我怀疑这是否有效<代码>百分比(…)生成一个百分比,本质上是一个字符串值。我需要将其四舍五入,精度为2位。如果我将百分比四舍五入-就不会了。只需将(百分比(@w/100))*0.01进行四舍五入即可。@EdD不起作用(总是),因为在1/100的二进制中也没有精确的表示。可以使用
百分比((…).toFixed(4))
,假设任意ECMAScript代码可以在更少的时间内使用。但是,在某些实现中它可能会中断,请参见。@AlexW
round(…)
将始终舍入为整数,而不是OP想要的小数点后2位。我怀疑这个问题能在更少的时间内得到解决。@EdD事实上,我怀疑这是否有效
percentage(…)
生成一个百分比,本质上是一个字符串值。使用浮点数这样做只是自找麻烦。你不能假设这对所有的数字都有效,也不是必须的。查看我的答案。请尝试将
@w/10000
存储在变量中并将其传递给百分比。@将其存储在变量中不会改变任何内容,因为变量类型可能是浮点型(ECMAScript
Number
)或字符串。如果客户端更少,我们可以安全地假设
@w:round(((100-((12-5)*3.8))/(12/5))*100);宽度:百分比(@w/10000)将转换为
变量[“w”]=数学圆((100-((12-5)*3.8))/(12/5))*100形式的代码;rule.width=((变量[“w”]/10000)*100)+“%”用浮点数做这些只是自找麻烦。你不能假设这对所有的数字都有效,也不是必须的。查看我的答案。请尝试将
@w/10000
存储在变量中并将其传递给百分比。@将其存储在变量中不会改变任何内容,因为变量类型可能是浮点型(ECMAScript
Number
)或字符串。如果客户端更少,我们可以安全地假设
@w:round(((100-((12-5)*3.8))/(12/5))*100);宽度:百分比(@w/10000)将转换为
变量[“w”]=数学圆((100-((12-5)*3.8))/(12/5))*100形式的代码;rule.width=((变量[“w”]/10000)*100)+“%”是。你是对的。问题出在/10000中。但令我惊讶的是,
.test{@w:round(((100-((12-5)*3.8))/(12/5))*100);width:percentage(@w/100)/100;}
运行良好=)@GOsha这是因为您仍然不理解浮点计算。请参阅“IEEE-754”链接。不客气,是的。你是对的。问题出在/10000中。但令我惊讶的是,
.test{@w:round(((100-((12-5)*3.8))/(12/5))*100);width:percentage(@w/100)/100;}
运行良好=)@GOsha这是因为您仍然不理解浮点计算。请参阅“IEEE-754”链接。不客气。