记录---基于BigDecimal的特殊的四舍五入

机试问题—实现基于BigDecimal的特殊的四舍五入。

这是一道外企的机试题,我把里面的某个难点部分,摘出来详细如下:
//实现特殊的四舍五入,先普通四舍五入取到小数点后两位,然后最后一位向后进位,0和5不变,1234变5,6789进1变0
也就是说最后一位要么是0,要么是5
// 2.201–>2.20
// 2.20–>2.20
// 2.23–>2.25
// 2.25–>2.25
// 2.26–>2.30
我的思路很简单,是将BigDecimal转换成int,然后利用取余取整,完成特殊的四舍五入的这个规则,然后再转成BigDecimal,注意精度即可。

import java.math.BigDecimal;public class Main {public static void main(String[] args) {//1.输入startdouble start = 2.445;BigDecimal input = new BigDecimal(start).setScale(2, BigDecimal.ROUND_HALF_UP);//2.小数点后两位四舍五入,然后乘以100,取整数int res = input.multiply(new BigDecimal(100)).intValue();System.out.println("input:" + input.toPlainString());System.out.println("res:" + res);int a = res;int b = a % 10;int c = a / 10;System.out.println("--" + a + "--" + b + "--" + c + "--");//3.取整数后根据题意,将尾数变成自定义的样子if (b == 0) {a = c * 10;} else if(b <= 5) {a = c * 10 + 5;} else {a = c * 10 + 10;}System.out.println(a);//4.最后输出时再除以100,为最终的结果值BigDecimal output = new BigDecimal(a).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);System.out.println("output:" + output.toPlainString());}
}

总结

本文是自定义四舍五入,也同样适用于其他规则,只需要将自定义那块的逻辑换掉即可,
本文核心是将BigDecimal转换成int,同时稍微注意下精度问题。

这种方法只是临时想的,不一定是最好的,

如果发现有问题或者更好的实现,欢迎继续探讨。

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

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

相关文章

获取iOS任意线程调用堆栈(五)完整实现:BSBacktraceLogger

转载自&#xff1a;https://toutiao.io/posts/aveig6/preview BSBacktraceLogger 是一个轻量级的框架&#xff0c;可以获取任意线程的调用栈&#xff0c;开源在我的 GitHub&#xff0c;建议下载下来结合本文阅读。 我们知道 NSThread 有一个类方法 callstackSymbols 可以获取调…

Mac电脑如何彻底删除清除数据?CleanMyMac X软件更专业

虽然不用杀毒&#xff0c;但是日常的清理还是有必要的&#xff0c;特别是卸载一些软件会有残留&#xff0c;可以用命令mdfind来找&#xff0c;然后删&#xff0c;这里给新手用户推荐一款应用clean my mac x&#xff0c;定期清理一下&#xff0c;不用的时候关掉就可以。 CleanM…

git总是提示输入用户名密码的解决记录

git总是提示输入用户名密码的解决记录 git改过密码后&#xff0c;再用命令行pull代码&#xff08;举个例子&#xff09;&#xff0c;就会每次让你输入用户名密码&#xff0c;很麻烦&#xff0c;比如&#xff1a; git pull origin dev:dev 输入用户名密码&#xff0c;ok了 git…

Git的思想和基本工作原理

转载自&#xff1a;http://www.nowamagic.net/academy/detail/48160210# 在开始学习 Git 的时候&#xff0c;请不要尝试把各种概念和其他版本控制系统&#xff08;诸如 Subversion 和 Perforce 等&#xff09;相比拟&#xff0c;否则容易混淆每个操作的实际意义。Git 在保存和处…

java后端获取客户端(用户)真实ip,原理

java后端获取客户端真实ip&#xff0c;原理&#xff1a; 一般都是下面代码中的做法&#xff1a;但很多人只知道这样能拿到&#xff0c;稍微有改动就不知道怎么办了 看看网上的各种说法&#xff0c;接下来容我一一讲解&#xff0c;如有纰漏&#xff0c;敬请指正。 public sta…

kafka入门:简介、使用场景、设计原理、主要配置及集群搭建

本文转自&#xff1a;http://www.aboutyun.com/thread-9341-1-1.html一、入门1、简介Kafka is a distributed,partitioned,replicated commit logservice。它提供了类似于JMS的特性&#xff0c;但是在设计实现上完全不同&#xff0c;此外它并不是JMS规范的实现。kafka对消息保存…

git大小写解决

git大小写解决 git reset --hard head git的回退操作 git config --get core.ignorecase 查看git忽略大小写的状态&#xff0c;true就是忽略大小写&#xff0c;false就是不忽略大小写 git config core.ignorecase false 更改git为不忽略大小写 情景1&#xff1a;&#xff08;…

深入理解Hadoop集群和网络

云计算和Hadoop中网络是讨论得相对比较少的领域。本文原文由Dell企业技术专家Brad Hedlund撰写&#xff0c;他曾在思科工作多年&#xff0c;专长是数据中心、云网络等。文章素材基于作者自己的研究、实验和Cloudera的培训资料。 本文将着重于讨论Hadoop集群的体系结构和方法&am…

Method-Swizzling实战-实现iOS原生网络请求性能采集

一、方法交换实现步骤&#xff08;实例方法和类方法处理逻辑类似&#xff09; 1.检查原类&#xff08;要被替换方法的类&#xff09;的原实例方法是否存在&#xff0c;如果不存在&#xff0c;则不交换&#xff1b;2.检查新类&#xff08;最终被使用的方法所在的类&#xff09;的…

java8新特性(1)--- lambda表达式

java8新特性&#xff08;1&#xff09;— lambda表达式 函数式编程&#xff0c;简化开发 新增语法&#xff08;->&#xff09; package com.common.jdk8;// 试想&#xff0c;如果在jdk1.7中&#xff0c;我们要实现基于这个接口的加法运算&#xff0c;一般会这样 // 先创建…

iOS中WebKit框架应用与解析

一、引言 在iOS8之前&#xff0c;在应用中嵌入网页通常需要使用UIWebView这样一个类&#xff0c;这个类通过URL或者HTML文件来加载网页视图&#xff0c;功能十分有限&#xff0c;只能作为辅助嵌入原生应用程序中。虽然UIWebView也可以做原生与JavaScript交互的相关处理&#xf…

java8新特性(2)--- 方法引用

java8新特性&#xff08;2&#xff09;— 方法引用 新增语法双冒号&#xff08;::&#xff09; package com.common.jdk8;import java.util.Arrays; import java.util.List;//方法引用 public class Jdk8Test2 {public static void main(String[] args) {//构造器引用&#x…

让WKWebView支持NSURLProtocol

NSURLProtocol能够拦截UIWebView内所有的请求&#xff0c;但是WKWebView 中的请求却完全不遵从这一规则&#xff0c;只是象征性调用canInitWithRequest方法&#xff0c;之后的整个请求流程似乎就与 NSURLProtocol 完全无关了。使我一度认为WKWebView请求不遵守NSURLProtocol协议…

java8新特性(3)--- 函数式接口

java8新特性&#xff08;3&#xff09;— 函数式接口 有且仅有一个抽象方法 package com.common.jdk8;import java.util.Arrays; import java.util.List; import java.util.function.Predicate;// 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法&#xff0c;…

Git仓库迁移,包括所有的分支、标签、日志

仅三行命令即可完成&#xff1a; git clone --bare http://域名/分组/仓库名称.git cd 仓库名称.git git push --mirror http://新域名/新分组/新仓库名称.git

java8新特性(4)— Stream流

java8新特性&#xff08;4&#xff09;— Stream流 遍历集合更强大 package com.common.jdk8;import java.util.*; import java.util.stream.Collectors;//Java 8 API添加了一个新的抽象称为流Stream&#xff0c;可以让你以一种声明的方式处理数据。 //Stream 使用一种类似用…

二、工作量证明链-区块链技术的雏形

用算法解决难题——区块链技术的雏形 构造出一个完美的、可以解决问题的“拜占庭容错系统”是一个不小的挑战。而且构造出来以后&#xff0c;其是否真的有效&#xff0c;能否经得起时间的考验与各方的质疑&#xff0c;这些都关乎着这个系统未来的命运与其创造群体的声誉。 2008…

CocoaPods通过网络代理执行资源更新

一、使用网络代理 首先在电脑设置网络代理配置。 二、设置git的http、https代理 1.查看git是否已经设置网络代理 首先可以先查本地的git配置有没有配置http/https代理&#xff1a;git config --global -e 如果没有看到 [http]proxy和 [https]proxy就代表没有设置http/http…

java8新特性(5)— Optional 类

java8新特性&#xff08;5&#xff09;— Optional 类 空指针解决方案 package com.common.jdk8;import java.util.Optional;//Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true&#xff0c;调用get()方法会返回该对象。 //Optional 是个容器&…

五、工作量证明链解决拜占庭将军问题之模拟程序(Objective-C)

一、概述&#xff1a; 此程序用来模拟工作量证明链如何解决拜占庭将军问题&#xff0c;使用Objective-C语言&#xff0c;需要使用Xcode开发工具运行并执行演示&#xff0c;演示结果打印在Xcode控制台。 二、示例程序&#xff1a; 程序下载地址&#xff1a;工作量证明链解决拜…