问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

eclipse Java编译中小数相加

发布网友 发布时间:2023-09-20 07:57

我来回答

5个回答

热心网友 时间:2024-12-14 23:06

Java中的简单浮点数类型float和double不能够进行运算。不光是Java,在其它很多编程语言中也有这样的问题。在大多数情况下,计算的结果是准确的,但是多试几次(可以做一个循环)就可以试出类似上面的错误

在《Effective Java》这本书中也提到这个原则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用java.math.BigDecimal。BigDecimal一共有4个够造方法,我们不关心用BigInteger来够造的那两个,那么还有两个,它们是:
BigDecimal(double val)
Translates a double into a BigDecimal.
BigDecimal(String val)
Translates the String repre sentation of a BigDecimal into a BigDecimal.

上面的API简要描述相当的明确,而且通常情况下,上面的那一个使用起来要方便一些。我们可能想都不想就用上了,会有什么问题呢?等到出了问题的时候,才发现上面哪个够造方法的详细说明中有这么一段:
Note: the results of this constructor can be somewhat unpredictable. One might assume that new BigDecimal(.1) is exactly equal to .1, but it is actually equal to .1000000000000000055511151231257827021181583404541015625. This is so because .1 cannot be represented exactly as a double (or, for that matter, as a binary fraction of any finite length). Thus, the long value that is being passed in to the constructor is not exactly equal to .1, appearances nonwithstanding.
The (String) constructor, on the other hand, is perfectly predictable: new BigDecimal(".1") is exactly equal to .1, as one would expect. Therefore, it is generally recommended that the (String) constructor be used in preference to this one.

原来我们如果需要精确计算,非要用String来够造BigDecimal不可!在《Effective Java》一书中的例子是用String来够造BigDecimal的,但是书上却没有强调这一点,这也许是一个小小的失误吧。

热心网友 时间:2024-12-14 23:06

java在做运算的时候,会将两个数的类型统一

统一的标准是想精度高的转

结果类型为高精度的类型

热心网友 时间:2024-12-14 23:07

一般数值运算最好使用统一的类型,否则就容易出现你的问题,特别是在要求高精度运算的时候

热心网友 时间:2024-12-14 23:08

java使用二进制!

热心网友 时间:2024-12-14 23:08

肯能是你的类型定义的问题
如前面两个数是double类型的,而结果定义的是long类型的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
豆瓣酱放多了怎么补救 鑫创sssbd量产工具 为了了解某校1500名学生的体质状况,随机调查了这个学校内一定数量学生... 564÷85的竖式如何列? 上海房屋过户 要准备什么资料 个人卖房要提供哪些资料 房屋交易资料需要哪些 房子买卖要哪些资料 房产交易需要什么资料 ...让重锤自由下落,打出的一条纸带如图所示,图中 sas精确度不高多个小数相加怎么办 编写一个java程序,计算1+2!+3!+4!+……前100项之和 霍林河穷吗 霍林河的发展怎样?好就业不? ...是什么东西?为什么真有其实,科学上怎么解释 ...恒温恒湿机有什么区别?什么是风冷型恒温恒湿机?需要详细的回答_百 ... 07年风冷型恒温湿机hf30怎么样 造梦西游3极品号源如何用 4399造梦西游极品号源怎么用 高中生可以参加哪些社会实践活动? 高中生社会实践内容有哪些呢? 委托书因什么原因不能来现场 ...日子数比月份数多一而这两个数的和是十九小华的生日是几月几日... 4.小华出生在哪一天? 2022年我满14周岁,-|||-可我只过了3个生且_百度... ...数比月份数多一 。而这两个数的和是19,小华的生日是几月几日... ...而这两个数的和是19,小华的生日是几月几日? ...已经张好了``可是我发现我大牙左则又开始张出一颗来了` 健身炼肌肉时不小心拉伤了怎么办 广联达地坪上500多孔砖怎么建模 呀诺达热带雨林都有哪些游玩项目? 这种多个数加法凑成相乘有没有什么技巧 ...pencil铅笔 pencil-case铅笔盒 ruler尺子 book书 bag包 comic... 手机号重新注册了一个,原来的咋找回来?? 以前的怎么登录? 我手机号注册了一个微信之后,我又注册了新的一个,以前那个... 一个手机号注册两个,前一个登录不了怎么办? 同一个手机号又注册了一个新微信,怎么用回原来的? 用同一个手机号重新注册了一个,之前的微信怎么登录? 20000毫安充电宝充满电要多少度电? 我想借妈妈的靴子去参加聚会,这样写对吗,I want to borrow mom's boot... 贵阳夏令营排名 黑龙江省医院住院处在哪? 华为610锁屏时间和通知栏时间不一样 我用手机设置腾达路由器密码怎么老显示8~63个字符什么意思啊? 路由器的密码输入后,总显示网络密码必须是128位或256位,可输入8到63个... ...网络密码必须是128位或256位,可以输入8到63个ASCII字符 ...网络密码必须是128位或256位。可以输入8到63个ASCII字符 ...网络密码必须是128位或256位。可以输入8到63个ASCII字符或64个十 ... tp-link路由器无线网密码设置位数不是64位吗,安卓上最多是63怎么... 盐酸酸洗缓蚀剂的包装与贮存