电商网站中价格的精确计算(使用BigDecimal进行精确运算(实现加减乘除运算))...

news/2024/5/20 1:32:51/文章来源:https://blog.csdn.net/weixin_33717117/article/details/93596740

使用BigDecimal的String的构造器。商业计算中,使用bigdecimal的String构造器,一定要用。

重要的事情说三遍:

商业计算中,使用bigdecimal的String构造器!

商业计算中,使用bigdecimal的String构造器!

商业计算中,使用bigdecimal的String构造器!

Bigdecimal的工具类:

具体参考下面转载的博客:

首先我们先来看如下代码示例:
复制代码 代码如下:public class Test_1 {
public static void main(String[] args) {
System.out.println(0.06+0.01);
System.out.println(1.0-0.42);
System.out.println(4.015*100);
System.out.println(303.1/1000);
}
}
运行结果如下
0.069999999999999990.5800000000000001401.499999999999940.30310000000000004
你认为你看错了,但结果却是是这样的。问题在哪里呢?原因在于我们的计算机是二进制的。浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。如:2.4的二进制表示并非就是精确的2.4。反而最为接近的二进制表示是 2.3999999999999999。浮点数的值实际上是由一个特定的数学公式计算得到的。
其实java的float只能用来进行科学计算或工程计算,在大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。
在使用BigDecimal类来进行计算的时候,主要分为以下步骤:
1、用float或者double变量构建BigDecimal对象。
2、通过调用BigDecimal的加,减,乘,除等相应的方法进行算术运算。
3、把BigDecimal对象转换成float,double,int等类型。
一般来说,可以使用BigDecimal的构造方法或者静态方法的valueOf()方法把基本类型的变量构建成BigDecimal对象。
复制代码 代码如下:BigDecimal b1 = new BigDecimal(Double.toString(0.48));
BigDecimal b2 = BigDecimal.valueOf(0.48);
对于常用的加,减,乘,除,BigDecimal类提供了相应的成员方法。
复制代码 代码如下:public BigDecimal add(BigDecimal value);//加法
public BigDecimal subtract(BigDecimal value); //减法 
public BigDecimal multiply(BigDecimal value); //乘法
public BigDecimal divide(BigDecimal value); //除法
进行相应的计算后,我们可能需要将BigDecimal对象转换成相应的基本数据类型的变量,可以使用floatValue(),doubleValue()等方法。
下面是一个工具类,该工具类提供加,减,乘,除运算。
复制代码 代码如下:public class Arith {
/*** 提供精确加法计算的add方法* @param value1 被加数* @param value2 加数* @return 两个参数的和*/
public static double add(double value1,double value2){
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.add(b2).doubleValue();
}
/*** 提供精确减法运算的sub方法* @param value1 被减数* @param value2 减数* @return 两个参数的差*/
public static double sub(double value1,double value2){
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.subtract(b2).doubleValue();
}
/*** 提供精确乘法运算的mul方法* @param value1 被乘数* @param value2 乘数* @return 两个参数的积*/
public static double mul(double value1,double value2){
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.multiply(b2).doubleValue();
}
/*** 提供精确的除法运算方法div* @param value1 被除数* @param value2 除数* @param scale 精确范围* @return 两个参数的商* @throws IllegalAccessException*/
public static double div(double value1,double value2,int scale) throws IllegalAccessException{
//如果精确范围小于0,抛出异常信息
if(scale<0){ throw new IllegalAccessException("精确度不能小于0");
}
BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
return b1.divide(b2, scale).doubleValue();
}

  

 

转载于:https://www.cnblogs.com/fengli9998/p/8001004.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_829519.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用Serverless架构下函数计算实现网站文件处理的最佳实践...

本文介绍如何通过函数计算实现网站文件管理的最佳实践&#xff0c;包括以下几个功能&#xff1a;•特定图片更新后&#xff0c;自动更新这些特定文件之前的压缩包&#xff08;compress函数&#xff09;•自动获取压缩包文件的md5值&#xff08;get-object-md5函数&#xff09;•…

sqlmap对php登录页面,SQLMAP/Metasploit介绍及PHP网站渗透

查找PHP网页&#xff1a; inurl:php?id查询jsp网页&#xff1a;inurl:asp?id判断网页的动态还是静态www.baidu.com------>www.baidu.com/index.html-----没有报错就是静态页面www.baidu.com/plasp?id86------>www.baidu.com/plasp?id86 and 11--测试网页是否有注入…

php新闻添加图片,开发企业网站12 -- 新闻添加(带图片上传)

require_once(init.php);if(!empty($_POST)){//这里接收news_add.php传过来的数据$data $_POST;//这个值有默认值&#xff0c;所以判断一下//传值就使用传过来的值&#xff0c;空值就使用默认值0$data[sort] !empty($_POST[sort])?intval($_POST[sort]):0;//修改功能&#x…

web浏览器与网站服务器,web服务器和web浏览器

web服务器和web浏览器 内容精选换一换当您需要实现网站HTTPS化&#xff0c;并监控HTTPS业务流量&#xff0c;识别并阻断SQL注入、CC攻击等攻击&#xff0c;保护Web服务安全稳定时&#xff0c;本文档指导您如何实现网站HTTPS化并对HTTPS业务流量进行监控。假设您有一个网站&…

匿名用户访问用发布站点模板创建网站的列表项时要求登录的问题解决

因为发布站点中的一个Feature被打开了&#xff0c;造成将列表FormPage的查看给Lock了&#xff0c;所以需要登录&#xff0c;将其关闭就OK了。哈哈。英文KB&#xff1a;Users are unexpectedly prompted to enter their credentials when they access a list in a Windows Share…

如何部署互动百科的开源wiki建站系统

最近想在技术部门内部搭建一个知识共享平台&#xff0c;经过一番了解和相关资料的查阅&#xff0c;选定了互动百科的开源wiki系统。选定互动wiki&#xff08;下文简称hdwiki)&#xff0c;主要的原因有如下几个方面&#xff1a; 1.中文版。这样对于我个人或者团队内部成员而言&a…

大型高性能网站的十项规则,互联网营销

在我们公司ChinaNetCloud&#xff0c;见过多种不同类型的网站和系统&#xff0c;有好也有差。其中有些系统拥有良好的服务器/网络架构&#xff0c;并且进行了合理的调整和监控&#xff1b;然而一般的系统都会有安全和性能上的问题&#xff0c;不能良好运行&#xff0c;也无法变…

Jupiter:微软的下一代统一开发平台?,徐汇区网站设计

Silverlight真的完了么&#xff1f;未来在Windows 8和Windows phone中抉择吗&#xff1f;这是一个萦绕在Windows开发者脑海的问题&#xff0c;曾经Silverlight是解决开发者们跨平台跨浏览器兼容性的钥匙&#xff0c;后来又有了Javascript和HTML5来创建Windows 8上面的应用&…

Java.net网站新改版上线

Java.net 网站在今年2月25日时关闭进行升级&#xff0c;现在已经升级完毕&#xff08;不知道什么升级需要这么长时间&#xff09;。新版本更新编辑网页、博客、wikis和改组后的论坛。原文链接&#xff1a;http://www.oschina.net/news/15947/javanet-gets-some-new-jolt转载于:…

16个精美的 HTML5 作品集网站设计案例

今天分享的作品集网站有些特别&#xff0c;因为他们都是使用 HTML5 制作的。对于设计师来说&#xff0c;为了吸引注意力&#xff0c;作品集必须展示出你的能力&#xff0c;这有点像制作简历&#xff0c;要让人们看到你所擅长的&#xff0c;突出的部分&#xff0c;这是一次推销自…

转载——网站重构的8点建议

1.用局部变量替换多次使用的对象 比如我们在一段代码内&#xff0c;多次使用document、window这样的对象&#xff0c;我们可以用局部变量替换他们。 var d document,w window; 原理&#xff1a;访问直接量和局部变量的速度快&#xff0c;相反&#xff0c;访问数组元素和对象成…

ASP.NET 2.0中轻松实现网站换肤

一、简介&#xff1a;利用Themes我们可以很容易的更改控件、页面的风格&#xff0c;而不需要修改我们的代码和页面文件。Themes文件被单独的放在1个App_Themes文件夹下面&#xff0c;与你的程序是完全分开的。二、怎么使用Themes和Skins&#xff1a;  先看个非常简单的实例&a…

Python 使用 scrapy shell 网站 进入命令窗口时候报错 AttributeError: module ‘lib‘ has no attribute

Python 使用 scrapy shell 网站 进入命令窗口时候报错 问题描述——AttributeError: module ‘lib’ has no attribute ‘X509_V_FLAG_CB_ISSUER_CHECK’‘action’ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 问题原因 错误分析&#xff1a;主要原因是…

想要好看的壁纸图片,用这个网站一键解决,不用爬虫也能实现爬虫效果,一键爬取图片网站所有的图片

想要好看的壁纸图片&#xff0c;用这个网站一键解决&#xff0c;不用爬虫也能实现爬虫效果&#xff0c;一键爬取图片网站所有的图片 网站的地址 https://extract.pics/演示例子&#xff1a; 图片网站 https://www.sohu.com/a/582693827_121123945演示&#xff1a;

视频工作者应该知道的几个网站

2019独角兽企业重金招聘Python工程师标准>>> 视频质量评价&#xff1a; MSU Video Quality Measurement Tool&#xff1a; MSU Video Quality Measurement Tool&#xff08;msu vqmt&#xff09;是一种客观视频质量评价程序。它提供了多种全参考视频质量评价方法&am…

在网站内建立地图(百度地图)

有时候网站会标注公司的地理位置&#xff0c;为了更直观的体现地理位置&#xff0c;一般会在网站内部嵌入地图。如下图例子&#xff1a; 完整html代码如下&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org…

利用Metaweblog技术的API接口同步到多个博客网站(详细)

很早就有这个想法&#xff1a;自己有时候会用到多个博客&#xff0c;有些博客在一个网站上写完之后&#xff0c;要同步到其他博客网站&#xff0c;自己只能复制粘贴&#xff0c;感觉特别没意思&#xff0c;复制粘贴的麻木了。一直在想有哪些技术能实现一次写博&#xff0c;多站…

IT开发常见网站整理-ing

1、http://www.stylusstudio.com/Stylus Studio是一款非常不错的XML编辑器&#xff0c;使用Stylus Studio可以帮助用户设计和导出XML项目的IDE环境&#xff0c;支持语法高亮&#xff0c;XPath查询编辑器&#xff0c;文档验证器&#xff0c;拼写检查等XML编辑器StylusStudio XML…

前端开发学习网站

1、http://www.runoob.com

用腾讯云搭建自己的个人网站(借助wordpress)

1、申请一个云服务器 https://console.cloud.tencent.com/cvm/instance/detail?actionDescribeInstanceVncUrl&rid8&idins-amwelbux 2、入门搭建个人博客用wordpress https://cloud.tencent.com/product/cvm/getting-started 三、登录云服务器&#xff1a; https:/…