仓酷云
标题:
NET网页编程之.NET中的十进制浮点范例
[打印本页]
作者:
小妖女
时间:
2015-1-16 14:26
标题:
NET网页编程之.NET中的十进制浮点范例
那做企业软件是不是最好用J2EE?<p>
.NET
中的
十进制浮点
范例
起首,甚么是十进制范例?
十进制范例仅是浮点数的别的一种暗示情势-可是与单精度浮点范例和双精度浮点范例分歧,十进制范例利用的进制是10。假如你还没有读下面链接给出的文章,如今将会是读它的最好工夫-我将不会在这篇文章中切磋浮点范例数字。
十进制范例于任何其他浮点数字有一样的组件:一个尾数,一个指数和一个标记。依照常规,标记位仅是一个比特,可是有96比特的尾数和5比特的指数位。但是,并非一切指数组合都是正当的。只要值是0~28的才干事情,一切的正数也都是无效的:数字值是标记*尾数/10指数。这意味着这个范例的最年夜值和最小值是+/-(296-1),最小的非零数字在相对值上是10-28.
指数被限定的缘故原由是尾数能够存储28或29个十进制数字(取决于它本人的精度)。你能够将28个数字能够设置成任何你想要的值,你能够将十进制浮点放在第一个数字的右边到最初一个数字的右侧间的任何一个中央,(有一些你可让第29个数字在其他数字右边的数字,可是因为限定,你不成以利用29个数字的一切组合。)它们都是无效的。
一个十进制数是怎样存储的
一个十进制数用128比特存储,只管只要102比特是严厉必需要有的。把十进制数以为是由尾数暗示的3个32位整型数是很便利的,然后就能够用一个整数暗示标记位和指数位。最初一个整数的最高位是标记位(在正式体例中,将最高位设置成(1)暗示正数)同时16~23位(高16位字的低位)暗示指数。其他位必需都是(0).这个暗示是由decimal.GetBits(decimal)供应的能够前往一个4个整型数数组的体例。
格局化十进制数
与单精度浮点数和双精度浮点数分歧,当.NET被请求将一个十进制数格局化成一个字符串暗示情势时,它的默许举动是给出准确值。这意味着二进制浮点范例文章当中的DoubleConverter代码里提到的一个十进制等效是没有需要的。固然,你能够用它来将值限定到一个特别的精度。
保存0
在.NET1.0和1.1间,十进制范例履历了一个奇妙的变更。思索上面的复杂代码:
<olclass="dp-xml">viewsourceprint?usingSystem;publicclassTest{staticvoidMain(){decimald=1.00m;Console.WriteLine(d);}}
当我起首运转下面的代码时(大概一些相似的),我等候它输入的了局是1(这是.NET1.0中应当有的了局)——但实践上,输入是1.00。十进制范例没有利用它本人的尺度-它记着了它有几个十进制数字(经由过程保护大概的申明)并格局化,0大概被计进一个主要的十进制数字。当两个分歧的十进制数相乘,相除,相加等等时,我不晓得选择哪一个申明(这里有一个选择)的准确划定规矩,可是当你用以下的程序测试时你大概会发明它很风趣。
<olclass="dp-xml">viewsourceprint?usingSystem;publicclassTest{staticvoidMain(){decimald=0.00000000000010000m;while(d!=0m){Console.WriteLine(d);dd=d/5m;}}}
它天生了一系列了局:
<olclass="dp-xml">viewsourceprint?0.000000000000100000.000000000000020000.000000000000004000.000000000000000800.000000000000000160.0000000000000000320.00000000000000000640.000000000000000001280.0000000000000000002560.00000000000000000005120.000000000000000000010240.0000000000000000000020480.00000000000000000000040960.000000000000000000000081920.0000000000000000000000163840.00000000000000000000000327680.00000000000000000000000065540.00000000000000000000000013110.00000000000000000000000002620.00000000000000000000000000520.0000000000000000000000000010.0000000000000000000000000002
一切的都是一个数字
十进制范例没有没有穷年夜大概NaN(not-a-number,不是一个数字)值,固然下面例子里的一样的实在数字隐含是分歧格局(好比1,1.0,1.00),一般的==操纵符思索了这些并呈报1.0==1.00.
准确性
在.NET中十进制范例比任何内建的浮点范例有更年夜的精度,只管它有一个绝对对照小的默许指数局限。良多操纵利用二进制浮点范例而没有利用十进制浮点范例来不准确的暗示原始操纵数却取得了让人感到惊奇的了局,精度是由于良多操纵在源码中依照十进制暗示的。但是,那其实不意味着一切操纵俄然变得准确起来:1/3仍旧是不完整暗示的,比方,潜伏的成绩与二进制浮点的成绩一样。但是,年夜多半时分十进制范例用来盘算总量,好比钱,操纵很复杂同时坚持了局准确。(比方,增加一个由百分比暗示的税负将会让数字准确,假定它们要在一个能够判别的局限内入手下手。)仅必要注重哪些操纵大概引发不准确,哪些操纵不会。
作为一个十分普遍的拇指(译注:thumb翻译为拇指大概禁绝确,以下类同)划定规矩,假如你停止检察一个十分长的字符串暗示举动(好比年夜多半28/29位数字都长短零的)那末有大概你会在这个过程当中失掉一些不准确:年夜多半对十进制范例的利用不会再数字已准确的情形下仍旧利用良多主要的数字来停止。
结论
<p>年夜多半贸易使用应当大概利用十进制而不是单精度浮点大概双精度浮点。我的拇指划定规矩是由人类制造的值好比泉币一般用十进制浮点范例暗示对照好:比方,‘准确的1.25美圆’这个的观点完整是有来由的。对来自天然天下的值,好比长度和分量,二进制浮点范例会加倍成心义。只管有一个实际的”准确我感觉可以顶到50楼,出乎意料的是大家居然纷纷写出自己的博文,还被编辑做成了专题,置于首页头条。
作者:
再见西城
时间:
2015-1-18 22:56
但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。
作者:
柔情似水
时间:
2015-1-27 22:01
ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。
作者:
第二个灵魂
时间:
2015-2-5 15:43
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
作者:
莫相离
时间:
2015-2-12 20:31
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
作者:
只想知道
时间:
2015-3-3 10:16
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
作者:
小魔女
时间:
2015-3-11 10:28
ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
作者:
因胸联盟
时间:
2015-3-18 11:41
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
作者:
飘灵儿
时间:
2015-3-26 00:11
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2