Javascript小技巧,去掉小数位并且不会四舍五入
2012-01-30 17:53
239 查看
varn3=52.3685;
document.writeln(n3>>0);//52
可以去掉小数。
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
如上代码,就是这么简单
右移位操作导致小数部分丢失,为何会这样呢?左移位可以吗?移位操作是否都有如此功能呢?
带着疑问又写了一段代码用来测试以上想法,继续上代码
{
n=52.123456;
//alert(typeofn);
alert(n);
}
//有符号右移
{
n=52.123456;
varn2=n>>0;
//alert(typeofn2);
alert(n2);
}
//无符号右移
{
n=52.123456;
varn3=n>>>0;
//alert(typeofn3);
alert(n3);
}
//左移0位
{
n=52.123456;
varn4=n<<0;
//alert(typeofn4);
alert(n4);
}
//按位或or
{
n=52.123456;
varn5=n|0;
//alert(typeofn5);
alert(n5);
}
//按位异或xor
{
n=52.123456;
varn6=n^0;
//alert(typeofn6);
alert(n6);
}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
那,这里不卖关子,直接给出测试结果来:以上五种方法均可以去掉小数点;然而为什么会这样呢?
翻翻EAMCScript规范吧,或许里边会有答案,见
先来看看位操作都做了什么,下边是位操作的实现步骤,重点在第五,第六步
11.7.1TheLeftShiftOperator(<<)
Performsabitwiseleftshiftoperationontheleftoperandbytheamountspecifiedbytherightoperand.
TheproductionShiftExpression:ShiftExpression<<AdditiveExpressionisevaluatedasfollows:
1.EvaluateShiftExpression.
2.Call
3.EvaluateAdditiveExpression.
4.Call
5.Call
6.Call
7.Maskoutallbuttheleastsignificant5bitsofResult(6),thatis,computeResult(6)&0x1F.
8.LeftshiftResult(5)byResult(7)bits.Theresultisasigned32bitinteger.
9.ReturnResult(8).|
再来看看那锅ToInt32干了什么,重点在第三步
9.5ToInt32:(Signed32BitInteger)
TheoperatorToInt32convertsitsargumenttooneof232integervaluesintherange-231through231-1,inclusive.Thisoperatorfunctionsasfollows:
1.Call
2.IfResult(1)isNaN,+0,-0,+∞,or-∞,return+0.
3.Computesign(Result(1))*floor(abs(Result(1))).
4.ComputeResult(3)modulo232;thatis,afiniteintegervaluekofNumbertypewithpositivesignandlessthan232inmagnitudesuchthemathematicaldifferenceofResult(3)andkismathematicallyanintegermultipleof232.
5.IfResult(4)isgreaterthanorequalto231,returnResult(4)-232,otherwisereturnResult(4).
最后来看那个floor是什么意思,这里重点看第三步的后半拉,就是那个floor是干什么滴
floor(x)=x-(xmodulo1)
看见没,就在这一步把小数干掉了
Floor(x)等于x减去x模上1
即
N=52.123456–52.123456%1
=52.123456-0.1234559999999
=52
搜代斯呐,春节快乐~
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
相关文章推荐
- 四舍五入并且去掉小数点后面多余的零
- JQuery插件第四十一:表单输入框获取指定小数位并且四舍五入
- javascript封装类的技巧:具有私有成员、私有方法、特权属性、特权方法、原型对象、静态成员,最重要的是不会失去封装的优点,并且不影响继承
- JavaScript DOM 制作搜索框,outline 去掉文本框获取焦点时候的颜色
- javascript小实例(判断用户输入的是不是数字,截取两位,四舍五入)
- 如何用javascript去掉字符串里的所有空格
- javascript小技巧
- 8个Javascript小技巧,让你写的代码有腔调
- javascript小技巧
- 递归算法在javascript中使用的小技巧 (javascript的对象封装方法介绍)
- PHP格式化金额,小数位截取而非四舍五入,末尾控制是否0补齐
- 40种网页常用小技巧(javascript)
- JavaScript 学习笔记一些小技巧
- 刷新页面不会导致javascript回收内存,最小化窗口会导致内存回收
- 【转载】三元运算符 使用小技巧一则 – javascript
- javascript常用小技巧[转]
- 每次用javascript控制CSS的style时总是不会写。搜集一下遇到的
- jQuery中把链接去掉并且保留其中的文字
- 常用JavaScript小技巧
- javascript 去掉空格之后的字符 正则表达式