java8 numberformat,仅Java 8的NumberFormat舍入问题
小编典典
我可以将此问题归类到java.text.DigitList522行。
这种情况是,它认为十进制数字6.0289已经舍入(与等效BigDecimal表示形式相比是正确的6.208899…),并决定不再舍入。问题在于,只有在舍入后的数字为的情况下才可以做出此决定5,而不是大于的情况下才有意义5。注意代码是如何HALF_DOWN正确区分digit=='5'和digit>'5'情况。
显然,这是一个错误,并且由于一个事实,即执行类似正确操作(仅针对另一个方向)的代码恰好位于损坏的错误代码的下面,因此这是一个奇怪的错误。
case HALF_UP:
if (digits[maximumDigits] >= '5') {
// We should not round up if the rounding digits position is
// exactly the last index and if digits were already rounded.
if ((maximumDigits == (count - 1)) &&
(alreadyRounded))
return false;
// Value was exactly at or was above tie. We must round up.
return true;
}
break;
case HALF_DOWN:
if (digits[maximumDigits] > '5') {
return true;
} else if (digits[maximumDigits] == '5' ) {
if (maximumDigits == (count - 1)) {
// The rounding position is exactly the last index.
if (allDecimalDigits || alreadyRounded)
/* FloatingDecimal rounded up (value was below tie),
* or provided the exact list of digits (value was
* an exact tie). We should not round up, following
* the HALF_DOWN rounding rule.
*/
return false;
else
// Value was above the tie, we must round up.
return true;
}
// We must round up if it gives a non null digit after '5'.
for (int i=maximumDigits+1; i
if (digits[i] != '0') {
return true;
}
}
}
break;
另一个数字没有发生这种情况的原因不是6.2088四舍五入的结果(再次与BigDecimal输出进行比较6.208800…)。因此,在这种情况下它将四舍五入。
2020-11-13
java8 numberformat,仅Java 8的NumberFormat舍入问题相关推荐
- java8中使用java.util.Base64报“java.lang.IllegalArgumentException: Illegal base64 character d”
概述 Base64是一种字符串编码格式,采用了A-Z,a-z,0-9,"+"和"/"这64个字符来编码原始字符(还有垫字符"=").一个字符 ...
- 如何处理 Java 中的 NumberFormat 异常
NumberFormatException是 Java 中的未经检查的异常,当尝试将格式不正确的字符串转换为数值时发生.因此,当无法将字符串转换为数字类型(例如 int.float)时会引发此异常.例 ...
- java8 streams_当Java 8 Streams API不够用时
java8 streams Java 8与往常一样是妥协和向后兼容的版本. JSR-335专家组可能尚未与某些读者就某些功能的范围或可行性达成一致的版本 . 请参阅Brian Goetz关于为什么-的 ...
- java8 streams_使用Java 8 Streams进行编程对算法性能的影响
java8 streams 多年来,使用Java进行多范式编程已经成为可能,它支持面向服务,面向对象和面向方面的编程的混合. 带有lambda和java.util.stream.Stream类的Jav ...
- java8 stream_使用Java Stream摘要统计
java8 stream 基本类型的流( IntStream等)提供了summaryStatistics( )方法,该方法可用于获取流的多个统计属性(最小值,平均值等). 假设我们有一个人的名单. 我 ...
- java BigDecimal八种舍入模式
一.BigDecimal介绍 java.math.BigDecimal 不可变的immutable.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值和32位的整数标度(scal ...
- java8 朗姆表达式,java同步数据库时间问题[问题点数:20分,结帖人vtison]
查看您说的数据类型,例如MySQL数据库,日期仅具有日期,时间仅具有时间,datetime是常用的记录时间类型,它可以精确到毫秒,就好像它是时间戳一样,时间戳也是可选的,第一个表中的timestamp ...
- java8 nullpoint_仅当在Java8中使用lambda时不为null时才过滤值
我有一个对象列表说汽车.我想基于使用Java 8的一些参数来过滤此列表.但是如果参数为null,则抛出NullPointerException.如何过滤掉空值? 目前的代码如下 requiredCar ...
- java round,java中round方法舍入问题
Math.round()是java中非常常用的一个方法,用来取整舍入,但使用时发现有不同的舍入结果 既不完全是 四舍五入 ,也不是所谓的 银行家舍入 而是 返回最接近它的整数,若有两个返回接近的整数, ...
最新文章
- TVM开发三个示例分析
- python subprocess模块 命令执行
- mysql workbench_爬虫实例:玩转mysql(预备篇)
- RegExp类型exec()方法的返回值说明
- Vue数据绑定v-bind
- 一段简单的打印代码(c#)
- 如何搜索旅行的好地方(MongoDb LINQ和.NET Core)
- c51单片机秒表程序c语言,单片机简易秒表C51程序
- pg_bigm 处理中间模糊匹配 like ‘%xxoo%‘
- lzg_ad:XPE常见问题FAQ
- 用友T+、U8、NC系列,致远OA产品二次开发
- html5制作心路历程,原创到伪原创 心路历程实战技巧
- mybatis parametertype可以不填么
- Chrome浏览器设置 【显示右上角 翻译语言图标】
- SAP ABAP强制触发PAI事件执行一次PBO
- 2023年中国十大软件公司排行榜 2023国内软件公司排名前十强
- Python-docx:读写word文档的Python库
- 焊接 0.5mm 间距 40pin 软排线底座FPC 的经验小谈
- mx250 计算能力_mx250相当于gtx多少 性能接近
- 二阶系统阶跃响应实验_实验二 二阶系统阶跃响应 -