四舍六入,奇进偶不进

数据修约规则

修约描述:四舍六入,奇进偶不进;保留n位有效数字时,第n+1位小于等于4时舍去,第n+1位大于等于6时进位。第n+1为5时,则判断第n+2位为奇数还是偶数,为奇数时进位,为偶数时不进位。

用法:=RTS(A1,n),n为保留几位有效数字

例如:=RTS(1.23512,3)

值为1.24

原因:1.23后一位为5,5的后一位时1为奇数,需要进位,则为1.24

主要思路就是字符串截取,判断后一位的值,如果是5判断后两位的值

里面里面有不少重复判断代码,后续有空了再改改

    public static String RTS(String data, int numberCnt) {double num = Double.parseDouble(data);int pointPlace = data.indexOf("."); //小数点存在的位置if (data.contains(".") && data.length() < numberCnt) {//有效位数不够,补0int length = numberCnt - (data.length() - 1);for (int i = 0; i < length; i++) {data = data + 0;}return data;}//处理部分在小数if (data.contains(".") && pointPlace <= numberCnt) {int index = data.substring(0, numberCnt).contains(".") ? numberCnt + 1 : numberCnt;//保留的总位数是否够位if (data.length() - 1 >= numberCnt) {char c;//保留的数字为整数部分,判断小数点后一位if (index == numberCnt) {c = data.charAt(index + 1);if (c >= '6') { //int i;int add;if (numberCnt == data.indexOf(".")) {i = 1;add = 10;} else {i = numberCnt - data.indexOf(".");add = 1;}double pow = num * Math.pow(10, i);pow = pow + add;String s = String.valueOf(pow / Math.pow(10, i));data = s.substring(0, index);} else if (c <= '4') { //不变data = data.substring(0, index);} else if ((c == '5' && index + 1 < data.length())) {//特殊情况  小数点的情况if (numberCnt == data.indexOf(".")) {if (data.length() - data.indexOf(".") == 2) { //先判断5后面还有没有值data = data.substring(0, index);} else if (data.charAt(index + 2) % 2 != 0) {int i = numberCnt + 1 - data.indexOf(".");double pow = num * Math.pow(10, i);pow = pow + 10;String s = String.valueOf(pow / Math.pow(10, i));data = s.substring(0, index);} else { //偶数不变data = data.substring(0, index);}} else {if (data.charAt(index + 1) % 2 != 0) { //奇数进一int i = numberCnt + 1 - data.indexOf(".");double pow = num * Math.pow(10, i);pow = pow + 10;String s = String.valueOf(pow / Math.pow(10, i));data = s.substring(0, index);} else { //偶数不变data = data.substring(0, index);}}} else {data = data.substring(0, index);}return data;} else if (index == data.length()) {return data;} else {c = data.charAt(index);if (c >= '6') { //int i;int add;if (numberCnt == data.indexOf(".")) {i = 1;add = 10;} else {i = numberCnt - data.indexOf(".");add = 1;}double pow = num * Math.pow(10, i);pow = pow + add;String s = String.valueOf(pow / Math.pow(10, i));data = s.substring(0, index);} else if (c <= '4') { //不变data = data.substring(0, index);} else if ((c == '5' && index + 1 < data.length())) {//特殊情况  小数点的情况if (numberCnt == data.indexOf(".")) {if (data.length() - data.indexOf(".") == 2) { //先判断5后面还有没有值data = data.substring(0, index);} else if (data.charAt(index + 2) % 2 != 0) {int i = numberCnt + 1 - data.indexOf(".");double pow = num * Math.pow(10, i);pow = pow + 10;String s = String.valueOf(pow / Math.pow(10, i));data = s.substring(0, index);} else { //偶数不变data = data.substring(0, index);}} else {if (data.charAt(index + 1) % 2 != 0) { //奇数进一int i = numberCnt + 1 - data.indexOf(".");double pow = num * Math.pow(10, i);pow = pow + 10;String s = String.valueOf(pow / Math.pow(10, i));data = s.substring(0, index);} else { //偶数不变data = data.substring(0, index);}}} else {data = data.substring(0, index);}return data;}} else {//补0for (int i = 0; i < numberCnt - (data.length() - 1); i++) {data = data + 0;}}//保留的部分在整数部分} else if (numberCnt <= pointPlace - 1) {//保留的最后一位小数前最后一位if (numberCnt + 1 == pointPlace) {if (data.charAt(numberCnt) <=  '4') {data = data.substring(0, numberCnt);data = data + 0;} else if(data.charAt(numberCnt) >=  '6') {data = data.substring(0, numberCnt);double newStr = Double.parseDouble(data);newStr = newStr + 1;data = String.valueOf(newStr * Math.pow(10, 1));}else if(data.charAt(numberCnt) ==  '5'){if (data.charAt(numberCnt + 2) % 2 != 0){data = data.substring(0, numberCnt);double newStr = Double.parseDouble(data);newStr = newStr + 1;data = String.valueOf(newStr * Math.pow(10, 1));if (data.contains(".")) {data = data.substring(0, data.indexOf("."));}}else {data = data.substring(0, numberCnt);data = data + 0;}}} else {//剩下的处理逻辑和整数部分相同data = data.substring(0, data.indexOf("."));int differ = data.length() - numberCnt;char c = data.charAt(numberCnt);if (c >= '6') {data = data.substring(0, numberCnt);double newStr = Double.parseDouble(data);newStr = newStr + 1;data = String.valueOf(newStr * Math.pow(10, differ));} else if (c <= '4') {data = data.substring(0, numberCnt);for (int i = 0; i < differ; i++) {data = data + 0;}} else if (c == '5') {if (numberCnt == data.length() - 1) { //先判断5后面还有没有值data = data.substring(0, numberCnt);data = data + 0;} else if (data.charAt(numberCnt + 1) % 2 != 0) {data = data.substring(0, numberCnt);double newStr = Double.parseDouble(data);newStr = newStr + 1;data = String.valueOf(newStr * Math.pow(10, differ));//结果包含.0 去除if (data.contains(".")) {data = data.substring(0, data.indexOf("."));}} else { //偶数不变data = data.substring(0, numberCnt);for (int i = 0; i < differ; i++) {data = data + 0;}}}}} else {//处理数据为整数if (data.length() <= numberCnt) {return data;} else {int differ = data.length() - numberCnt;char c = data.charAt(numberCnt);if (c >= '6') {data = data.substring(0, numberCnt);double newStr = Double.parseDouble(data);newStr = newStr + 1;data = String.valueOf(newStr * Math.pow(10, differ));} else if (c <= '4') {data = data.substring(0, numberCnt);for (int i = 0; i < differ; i++) {data = data + 0;}} else if (c == '5') {if (numberCnt == data.length() - 1) { //先判断5后面还有没有值data = data.substring(0, numberCnt);data = data + 0;} else if (data.charAt(numberCnt + 1) % 2 != 0) {data = data.substring(0, numberCnt);double newStr = Double.parseDouble(data);newStr = newStr + 1;data = String.valueOf(newStr * Math.pow(10, differ));//结果包含.0 去除if (data.contains(".")) {data = data.substring(0, data.indexOf("."));}} else { //偶数不变data = data.substring(0, numberCnt);for (int i = 0; i < differ; i++) {data = data + 0;}}}}}return data;}

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

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

相关文章

修改网站源码,给电子商城的商品添加图片时商品id为0的原因

修改网站源码&#xff0c;给电子商城的商品添加图片时商品id为0的原因。花了几个小时查找原因。后来&#xff0c;由于PictureControl.class.php是复制CourseControl.class.php而来&#xff0c;于是对比了这两个文件&#xff0c;在CourseControl.class.php找到了不一样的关键几条…

【算法】差分算法(空调)

可用于求一个数组要变为另一个数组最少要改变多少次的次数 Farmer John 的 N 头奶牛对他们牛棚的室温非常挑剔。 有些奶牛喜欢温度低一些&#xff0c;而有些奶牛则喜欢温度高一些。 Farmer John 的牛棚包含一排 N 个牛栏&#xff0c;编号为 1…N&#xff0c;每个牛栏里有一头…

web学习笔记(四十)

目录 1.Symbol 1.1Symbol的特点 1.2 Symbol创建对象属性 1.3 .Symbol 内置值 2.迭代器 1.Symbol 1.1Symbol的特点 Symbol是ES6新增的一种数据类型&#xff0c;表示独一无二的值&#xff0c;是一种类似于字符串的数据类型。 1.Symbol 的值是唯一的&#xff0c;用来解决命名…

【Linux系列】计算机系统中的架构与发行版:理解与区分

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

一文读懂MES和ERP的区别

MES&#xff08;Manufacturing Execution System&#xff09;系统是制造执行系统&#xff0c;位于上层的计划管理系统与生产过程的直接工业控制系统之间&#xff0c;是面向车间层的管理信息系统&#xff0c;能够对整个车间制造过程进行优化&#xff0c;实时收集生产过程中的数据…

关于安卓文件复制的杂谈(一)文件复制,文件夹复制

背景 一些很基础的东西&#xff0c;往往用起来&#xff0c;找起来&#xff0c;乱七八糟&#xff0c;所以特此记录 环境 win10,jdk8,as4 备注 不考虑安卓沙箱机制&#xff0c;这里讲解的是思路&#xff0c;示例中&#xff0c;是以应用内部目录进行测试 开发 把一个文件&a…

LeetCode-60题:排列序列解法二(原创)

【题目描述】 给出集合 [1,2,3,...,n]&#xff0c;其所有元素共有 n! 种排列。按大小顺序列出所有排列情况&#xff0c;并一一标记&#xff0c;当 n 3 时, 所有排列如下&#xff1a;"123" 、"132" 、"213" 、"231"、"312"、…

数字化转型:传统行业的新出路?

近年来&#xff0c;数字化转型已成为各行各业的热议话题。许多传统行业正面临着巨大的挑战&#xff0c;例如市场竞争加剧、成本上升、利润率下降等。数字化转型被视为传统行业破局的关键。那么&#xff0c;数字化转型究竟是不是传统行业的新出路呢&#xff1f; 传统行业面临的挑…

Qt 坐标位置转换

Qt 坐标位置转换 文章目录 Qt 坐标位置转换常见的位置坐标转换Qt窗体中常用坐标的区别与获取途径当前光标相对于屏幕的绝对位置当前光标相对于当前窗口的位置鼠标事件发生的位置窗体的位置判断鼠标光标是否悬浮在某个子控件上 从事Qt快一年了 &#xff0c;在做坐标转换的时候容…

OpenCV4.9.0在Android 开发简介

查看&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;使用 Clojure 进行 OpenCV 开发简介 下一篇&#xff1a;暂无 引言&#xff1a; OpenCV是一个跨平台计算机视觉库&#xff0c;广泛用于图像处理、计算机视觉和机器学习等领域…

python网络爬虫实战教学——urllib的使用(3)

文章目录 专栏导读1、urlsplit2、urlunsplit3、urljoin4、urlencode 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN 数据分析领域优质创作者&#xff0c;专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》&#xff0c;本专栏针对大学生、…

日志集中审计系列(1)--- LogAuditor接收DAS设备syslog日志

日志集中审计系列(1)--- LogAuditor接收DAS设备syslog日志 前言拓扑图设备选型组网需求配置思路操作步骤结果验证前言 近期有读者留言:“因华为数通模拟器仅能支持USG6000V的防火墙,无法支持别的安全产品,导致很多网络安全的方案和产品功能无法模拟练习,是否有真机操作的…

群发短信后的实际效果统计分析

群发短信后的实际效果统计分析是评估短信营销效果的关键环节&#xff0c;有助于企业了解短信发送的效果&#xff0c;并据此优化营销策略。以下是对群发短信实际效果统计分析的详细探讨&#xff1a; 首先&#xff0c;企业需要关注短信的发送成功率。这包括短信是否成功发送至目标…

TinTin Web3 Bounty 挑战杯开启,Sui 向你发出挑战邀请!

2024 年开年最火的是什么&#xff1f; 对 Web3 来说&#xff0c;Bounty 任务应该是普通人获得行业“一杯羹”的重要捷径&#xff01; 通过深入学习各类 Web3 技术&#xff0c;凭借实战锻炼开发创新项目&#xff0c;就有机会获得各大生态项目方的 Bounty 奖励。 TinTinLand 社…

TSINGSEE青犀数字化、智能化视频技术推动森林防火智慧监管

一、背景分析 中央网络安全和信息化委员会印发《“十四五”国家信息化规划》&#xff0c;明确指出“提升林草生态网络感知能力&#xff0c;完善生态系统保护成效数字化监测评估体系”。这为数字化系统建设引领了方向&#xff0c;中国林业信息化建设迈入了新的阶段&#xff0c;全…

HTML5语法总结

文章目录 一.HTML基本框架二.标题标签三.段落标签四.换行与水平线标签五.文本格式化标签(加粗、倾斜、下划线、删除线)六.图像标签扩展&#xff1a;相对路径,绝对路径与在线网址 七.超链接标签八.音频标签九.视频标签十.列表标签十一.表格标签扩展&#xff1a;表格结构标签合并…

[C/C++] -- 链表

C/C 中链表是一种常见的数据结构&#xff0c;用于存储和组织数据。链表由节点&#xff08;Node&#xff09;组成&#xff0c;每个节点包含数据和指向下一个节点的指针。链表相对于数组的优势在于可以动态地分配内存&#xff0c;插入和删除操作效率高&#xff0c;但访问元素的随…

MacOS 电脑如何通过自带terminal终端连接PostgreSQL

1、安装Postgre SQL客户端工具 brew install postgresql 2、连接到PostgreSQL &#xff08;1&#xff09;创建远程连接 psql -h hostname -U username -d database 其中&#xff0c;hostname 是 PostgreSQL 服务器的主机名或 IP 地址&#xff0c;username 是您的 PostgreS…

机器学习 - 预测训练模型

接着上篇博客机器学习-训练模型做进一步说明。 There are three things to make predictions (also called performing inference) with a PyTorch model: Set the model in evaluation mode (model.eval())Make the predictions using the inference mode context manager (…

学点Java_Day6_基于Copyright和Actions On Save的IDEA自动更新文件最后编辑时间的方法研究(IDEA2021.2及以上)

0 版本要求 IDEA2021.2及以上&#xff0c;我用的IntelliJ IDEA 2023.2.4 1 操作 1.1 Copyright设置 ① CtrlAltS打开设置&#xff08;Settings&#xff09;→ Editor → Copyright   ② Copyright → Copyright Profiles → → 取名 → OK   ③ 复制下面内容到框里&am…