当前位置: 首页 > news >正文

郴州网站制作公司地址企业网站托管方式

郴州网站制作公司地址,企业网站托管方式,让别人做网站需要注意什么问题,什么网站可以做私房菜外卖看下面这段代码#xff0c;将 d1 和 d2 两个浮点数进行比较#xff0c;输出的结果会是什么#xff1f;double d1 .1 * 3;double d2 .3;System.out.println(d1 d2);按照正常逻辑来看#xff0c;d1经过计算之后的结果应该是0.3#xff0c;最后打印的结果应该是 true…看下面这段代码将 d1 和 d2 两个浮点数进行比较输出的结果会是什么double d1 .1 * 3;double d2 .3;System.out.println(d1 d2);按照正常逻辑来看d1经过计算之后的结果应该是0.3最后打印的结果应该是 true对吧但是运行一下就会发现结果并不是 true 而是 false 。输出一下 d1发现得到的答案不是想象中的 0.3 而是 0.30000000000000004所以和 d2 进行比较结果自然是 false如何正确地比较浮点数(单精度的 float 和双精度的 double)不单单是 Java 特定的问题在计算机的内存中存储浮点数时使用的是 IEEE 754 标准就会有精度的问题。存储和转换的过程中浮点数容易引起一些较小的舍入误差正是这个原因导致在比较浮点数的时候不能使用“”操作符——要求严格意义上的完全相等。那么如何正确的比较浮点数呢这里有两种方案。第一种方案是允许两个值之间存在一点误差(指定一个阈值)使用 Math.abs() 方法来计算两个浮点数之间差异的绝对值如果这个差异在阈值范围之内我们就认为两个浮点数是相等的。final double THRESHOLD .0001;double d1 .1 * 3;double d2 .3;if(Math.abs(d1-d2) THRESHOLD) {System.out.println(d1 和 d2 相等);} else {System.out.println(d1 和 d2 不相等);}Math.abs() 方法用来返回 double 的绝对值如果 double 小于 0则返回 double 的正值否则返回 double。也就是说abs() 后的结果绝对大于 0如果结果小于阈值(THRESHOLD)我们就认为 d1 和 d2 相等。第二种方案是使用 BigDecimal 类可以指定要舍入的模式和精度这样就可以解决舍入的误差。以使用 BigDecimal 类的 compareTo() 方法对两个数进行比较该方法将会忽略小数点后的位数怎么理解这句话呢比如说 2.0 和 2.00 的位数不同但它俩的值是相等的。a.compareTo(b) 如果 a 和 b 相等则返回 0否则返回 -1。tips: 不要使用 equals() 方法对两个 BigDecimal 对象进行比较这是因为 equals() 方法会考虑位数如果位数不同则会返回 false尽管数学值是相等的。BigDecimal a new BigDecimal(2.00);BigDecimal b new BigDecimal(2.0);System.out.println(a.equals(b));System.out.println(a.compareTo(b) 0);上面的代码中 a.equals(b) 的结果就为 false因为 2.00 和 2.0 小数点后的位数不同但 a.compareTo(b) 0 的结果就为 true因为 2.00 和 2.0 在数学层面的值的确是相等的。compareTo() 方法比较的过程非常严谨源码如下private int compareMagnitude(BigDecimal val) {// Match scales, avoid unnecessary inflationlong ys val.intCompact;long xs this.intCompact;if (xs 0)return (ys 0) ? 0 : -1;if (ys 0)return 1;long sdiff (long)this.scale - val.scale;if (sdiff ! 0) {// Avoid matching scales if the (adjusted) exponents differlong xae (long)this.precision() - this.scale; // [-1]long yae (long)val.precision() - val.scale; // [-1]if (xae yae)return -1;if (xae yae)return 1;if (sdiff 0) {// The cases sdiff Integer.MIN_VALUE intentionally fall through.if ( sdiff Integer.MIN_VALUE (xs INFLATED ||(xs longMultiplyPowerTen(xs, (int)-sdiff)) INFLATED) ys INFLATED) {BigInteger rb bigMultiplyPowerTen((int)-sdiff);return rb.compareMagnitude(val.intVal);}} else { // sdiff 0// The cases sdiff Integer.MAX_VALUE intentionally fall through.if ( sdiff Integer.MAX_VALUE (ys INFLATED ||(ys longMultiplyPowerTen(ys, (int)sdiff)) INFLATED) xs INFLATED) {BigInteger rb val.bigMultiplyPowerTen((int)sdiff);return this.intVal.compareMagnitude(rb);}}}if (xs ! INFLATED)return (ys ! INFLATED) ? longCompareMagnitude(xs, ys) : -1;else if (ys ! INFLATED)return 1;elsereturn this.intVal.compareMagnitude(val.intVal);}接下来用 BigDecimal 来解决开头的问题。BigDecimal d1 new BigDecimal(0.1);BigDecimal three new BigDecimal(3);BigDecimal d2 new BigDecimal(0.3);d1 d1.multiply(three);System.out.println(d1 d1);System.out.println(d2 d2);System.out.println(d1.compareTo(d2));程序输出的结果如下d1 0.3d2 0.30d1 和 d2 都为 0.3所以 compareTo() 的结果就为 0表示两个值是相等的。总结一下在遇到浮点数的时候千万不要使用 操作符来进行比较因为有精度问题。要么使用阈值来忽略舍入的问题要么使用 BigDecimal 来替代 double 或者 float。
http://wiki.neutronadmin.com/news/264553/

相关文章:

  • pac网站代理seozhun
  • 北理离线《网站开发与应用》平面网页设计教学
  • 网站开发常用js函数官方网站下载拼多多
  • 备案中的网站名称微信开发公司怎么样
  • 网站域名注册哪家好东莞排名推广
  • 网站免费制作教程珠海高端网站建设
  • 阳春做网站公司学习做网站多久
  • 如何让网站火起来wordpress 获取当前文章id
  • 做网站美工工资多少wordpress首页文章显示固定分类
  • 网站筑云做关键词网站建设哪里找
  • 广西南宁建设银行最新招聘网站wordpress的插件下载地址
  • 网站建设需求量深圳住房与建设局网站
  • 自适应型网站建设费用邢台做wap网站的公司
  • 滨海新区建设网站平面设计公司赚钱吗
  • 响应式网站头部企业网站改版建议
  • 福田做网站公司怎么选择肇庆免费模板建站
  • 网址大全123官方网站品牌推广专员
  • 优秀的学校网站欣赏h5网站做微信小程序
  • 只做app不做网站可以吗德州网站开发公司
  • 黄陂建设网站做面料那几个网站
  • 如何绑定网站域名网站做附件下载地址
  • 51ppt模板免费下载网站大同网站建设设计
  • 手机网站架构纯净软件网站推荐
  • 企梦网站建设网站开发制作合同范本
  • 深圳网站制作07551页游大全
  • wordpress 网站关键词西安做北郊做网站
  • 一些免费的网站重庆seo顾问服务
  • 厦门建设公司网站网络知识
  • 淄博网站开发选网泰外贸找客户有什么网站
  • 商业设计网站推荐干净的下载网站