java 向上取整 java对小数取整

news2025/1/12 6:14:30

取整方法
Math.floor(double a) 向下取整
Math.ceil(double a) 向上取整
Math.round(double a) 四舍五入
+0.5向下取整
Math.rint(double a) 就近取整
1.6接近2,所以就取2
1.4接近1,所以就取1
1.5跟1和2都很接近,这时候就取偶数
(int) 类型强转
直接截取小数

测试示例
测试示例代码 

public static void main(String[] args) {
    double[] teArr = new double[]{1.4, 1.5, 1.6};
    for (double t1 : teArr) {
        System.out.println("==========================================================");
        System.out.println("测试数据:" + t1);
        // 向下取整
        System.out.println("向下取整 " + Math.floor(t1));
        // 向上取整
        System.out.println("向上取整 " + Math.ceil(t1));
        // 四舍五入或(+0.5向下取整)
        System.out.println("四舍五入 " + Math.round(t1));
        // 就近取整 如1.6接近2,所以就取2;1.4接近1,所以就取1;那么1.5呢,1.5跟1和2都很接近,这时候就取偶数
        System.out.println("就近取整 " + Math.rint(t1));
        // 类型强转 直接截取小数
        System.out.println("类型强转 " + (int) t1);
    }
}
-----------------------------------
java 小数取整 java对小数取整
https://blog.51cto.com/u_14112/6338010

 示例返回结果

==========================================================
测试数据:1.4
向下取整 1.0
向上取整 2.0
四舍五入 1
就近取整 1.0
类型强转 1
==========================================================
测试数据:1.5
向下取整 1.0
向上取整 2.0
四舍五入 2
就近取整 2.0
类型强转 1
==========================================================
测试数据:1.6
向下取整 1.0
向上取整 2.0
四舍五入 2
就近取整 2.0
类型强转 1
-----------------------------------
java 小数取整 java对小数取整
https://blog.51cto.com/u_14112/6338010

 Java两整数相除向上取整的方式详解(Math.ceil())

在调外部接口获取列表数据时,需要判断是否已经取完了所有的值,因此需要用到向上取整

Java中两个整数相除,如果不能整除,默认是向下取整的。例如:11 除以 3 的结果是 3。然而,某些情况下(eg. 把11个糖果,每3个分一堆,不足三个也分成一堆,可以分几堆?),我们需要向上取整,这样的情况该如果处理呢? 

方式一: 添加三目运算符逻辑代码 

	x / y + (x % y != 0 ? 1 : 0);

 这种方法逻辑上很简单,如果x可以整除y,就将x / y 的结果加0,不能整除y就将x / y 的结果加1。

方式二:使用ceil函数 

(int)Math.ceil((double)x/y);
// 或者
(int)Math.ceil(x * 1.0 /y);

 首先,将被除数转换成double类型,再将计算的结果通过Math.ceil()函数向上取整,这种方式是网上经常可以看到的方式。

方式三:其他逻辑 

(x + y - 1) / y

 

这种方式为什么可以达到向上取整的效果呢,为什么x要加y - 1?

为了方便理解,我们通过具体的计算来说明。

1.对于可以整除的情况

x = 9,y = 3

(x + (y - 1)) / y,x加上了一个比y小的数,最终(x + (y - 1)) / y = (x / y) ...y - 1

商为(x / y), 余数为(y - 1),余数相当于两数相除结果都小数部分,会被舍去,最终(x + (y - 1)) / y` = (x / y)

2.对于不可以整除的情况

x = 11, y = 3

11 / 3 = 3 ... 2

x + (y - 1) = (3 * 3 + 2) + (3 - 1) = (3 * 3 + 2 - 1)+ 3= (3 * 3 + 3) + 2 - 1

x + (y - 1) / y = ((3 * 3 + 3) + 2 - 1 )/ 3 = 4

就是x不能整除y余数肯定在1到y - 1之间,从中取出1给y - 1,使得被除数增加了一个y,进而商会增加1,余数部分为0到y - 2是会被舍去的。

java向上取整函数Math.ceil() 

java向上取整函数Math.ceil()

百度Math.ceil()函数:“Math.ceil()是常见编程语言中的常用代码,ceil() 方法执行的是向上取整计算,它返回的是大于或等于函数参数,并且与之最接近的整数。“

Math.ceil(param)使用实例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

double dividend = 7;    // 被除数

double divisor = 2;     // 除数

double flag = 0;   

int result1 = 0;

int result2 = 0;

// 函数式

flag = Math.ceil(dividend / divisor);       //向上取整计算

result1 = (int)flag;            //将结果转化为int数据类型

// 判断式:整除法

if ((dividend % divisor) == 0) {

    result2 = (int)dividend / (int)divisor;               // 将操作数转化为int型数据

} else {

    result2 = ((int)dividend / (int)divisor) + 1;         // 将操作数转化为int型数据

}

Object[] options = { "成功", "取消" };

JOptionPane.showOptionDialog(null, "函数ceil求值=" + result1 + "; 判断求值=" +result2,

    "Warning",JOptionPane.DEFAULT_OPTION,

    JOptionPane.WARNING_MESSAGE,null, options, options[0]);

结果为所要的:(函数式与整除判断式等效)

注意:

两个限制:判断式,适用于整除;其操作数为int(Integer)数据类型,否则,得不到想要的效果。函数式,若使用int(Integer)作为操作数(参数),需要特别注意:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

double dividend = 7;    // 被除数

double divisor = 2;     // 除数

double flag = 0;   

int result1 = 0;

int result2 = 0;

// 函数式

// ① (int)dividend / (int)divisor 将计算结果直接转换为int型,因此这里的结果为3

//(int 类型丢失精度,即小数点之后的数丢失,本例的 3.5 丢失了0.5;

// 这里涉及 高精度数 向 低精度数 转化时,会丢失精度。

// 精度从低到高 int < double < float).

// ② Math.ceil(3)函数执行,向上取整,也是3

// 感谢 博友“ws458371436” 的纠正,之前这个地方是糊涂的,还好有博友的细心,避免再误导其他朋友

flag = Math.ceil((int)dividend / (int)divisor); // 向上取整计算int = Math.ceil(int),对int整数取整,纯属多余!

result1 = (int)flag;        //将结果转化为int数据类型

// 判断式:整除法

if ((dividend % divisor) == 0) {

    result2 = dividend / divisor;                    // 保持double型数据类型

} else {

    result2 = (dividend / divisor) + 1;             // 保持double型数据类型

}

Object[] options = { "成功", "取消" };

JOptionPane.showOptionDialog(null, "函数ceil求值=" + result1 + "; 判断求值=" +result2,

    "Warning",JOptionPane.DEFAULT_OPTION,

    JOptionPane.WARNING_MESSAGE,null, options, options[0]);

测试结果:

总结:函数(接口),都具有它的适应范围和限制条件,正是这些条件,标定了基本功能,有准确的指向,得出特定效果。这也是智能。

 

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

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

相关文章

【CTF-web】buuctf-[极客大挑战 2019]EasySQL 1(sql注入)

题目链接 根据题目判断出可能需要sql注入&#xff0c;看源码可知数据是通过GET的方式传输的&#xff0c;即放在url的username和password两个参数中。 只要将username输入为1 or 11#&#xff0c;password可以为任何值&#xff0c;即可顺利登录。 需要注意的是url中的井号表示…

innovus IMPSP-270 place阶段lib_cell找不到可放置位置问题

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 通过manual我们知道产生这个问题的原因有两个&#xff0c;要么没row&#xff0c;你需要重新floorplan initCoreRow&#xff0c;另外可能是设置了setPlaceMode -prerouteAsObs&a…

【PLC】上位机通过SMLP协议与三菱FX5U通信

0. 准备步骤 准备三菱 FX5U PLC 0.1 安装 GX Works3 首先点击右侧链接进入三菱官网&#xff0c;下载 GX Works3&#xff08;需要注册三菱的账号&#xff09; 若不想进官网下载也可以下载我为大家准备的网盘安装包&#xff1a;百度网盘安装包 GX Works3 下载完成后解压&#…

输入输出+暴力模拟入门:魔法之树、染色の树、矩阵、字母加密、玫瑰鸭

秋招实习刷题网站推荐&#xff1a;codefun2000.com&#xff0c;还有题解博客&#xff1a;blog.codefun2000.com/。以下内容都是来自塔子哥的~ 输入输出 2023.04.15-春招-第三题-魔法之树 //#include<bits/stdc.h> #include<vector> #include<iostream>usin…

C++ STL常用算法(详解)

C常用算法 C sort()排序函数用法详解 C STL 标准库提供有很多实用的排序函数&#xff0c;如表 1 所示。通过调用它们&#xff0c;我们可以很轻松地实现对普通数组或者容器中指定范围内的元素进行排序。 ​ 表 1 C STL 排序函数 函数名用法sort (first, last)对容器或普通数…

广度优先遍历与最短路径(Java 实例代码源码包下载)

目录 广度优先遍历与最短路径 Java 实例代码 src/runoob/graph/ShortestPath.java 文件代码&#xff1a; 广度优先遍历与最短路径 广度优先遍历从某个顶点 v 出发&#xff0c;首先访问这个结点&#xff0c;并将其标记为已访问过&#xff0c;然后顺序访问结点v的所有未被访问…

Redis在Java中的基本使用

本片将介绍 Redis 在 Java 中的基本使用 文章目录 1、使用jedis操作redis1.1、Jedis简介1.2、引入jedis的Maven依赖1.2、获取连接1.3、使用实例 2、对于JedisPooled的使用2.1、使用JedisPooled2.2、关于连接池 3、SpringBoot下使用Redis3.1、引入Maven依赖3.2、配置Redis连接3.…

POJ 1995 Raising Modulo Numbers 快速幂

一、总结 我一开始担心溢出&#xff0c;开了一个无符号的long long&#xff0c;但是直接超时&#xff0c;后来一看它的mod不是很大&#xff0c;于是改成int&#xff0c;直接过了。 二、代码 #include <iostream> using namespace std; int H, Z; int M; int mulMod(in…

【Linux操作系统】详解Linux系统编程中的管道进程通信

在Linux系统编程中&#xff0c;管道是一种常用的进程间通信方式。它可以实现父子进程之间或者兄弟进程之间的数据传输。本文将介绍如何使用管道在Linux系统中进行进程通信&#xff0c;并给出相应的代码示例。 文章目录 1. 管道的概念2. 管道的创建和使用2.1 原型2.2 示例 3. 父…

Azure Blob存储使用

创建存储账户,性能选择标准即可&#xff0c;冗余选择本地冗余存储即可 容器选择类别选择专用即可 可以上传文件到blob中 打开文件可以看到文件的访问路径 4.编辑中可以修改文件 复制链接&#xff0c;尝试访问&#xff0c;可以看到没有办法访问&#xff0c;因为创建容器的时候选…

Dubbo Spring Boot Starter 开发微服务应用

环境要求 系统&#xff1a;Windows、Linux、MacOS JDK 8 及以上&#xff08;推荐使用 JDK17&#xff09; Git IntelliJ IDEA&#xff08;可选&#xff09; Docker &#xff08;可选&#xff09; 项目介绍 在本任务中&#xff0c;将分为 3 个子模块进行独立开发&#xff…

技术分享| WebRTC之SDP详解

一&#xff0c;什么是SDP WebRTC 是 Web Real-Time Communication&#xff0c;即网页实时通信的缩写&#xff0c;是 RTC 协议的一种Web实现&#xff0c;项目由 Google 开源&#xff0c;并和 IETF 和 W3C 制定了行业标准。 WebRTC是点对点通讯&#xff0c;他的通话建立需要交换…

读书笔记-《ON JAVA 中文版》-摘要22[第二十章 泛型-1]

文章目录 第二十章 泛型1. 简单泛型1.1 简单泛型1.2 一个元组类库 2. 泛型接口3. 泛型方法3.1 泛型方法3.2 变长参数和泛型方法 4. 构建复杂模型 第二十章 泛型 普通的类和方法只能使用特定的类型&#xff1a;基本数据类型或类类型。如果编写的代码需要应用于多种类型&#xff…

神卓互联内网穿透

神卓互联内网穿透是一种技术&#xff0c;用于实现在不同网络环境下的设备互相访问。通常情况下&#xff0c;内网设备无法直接从外部访问&#xff0c;但通过内网穿透技术可以实现外部设备与内网设备之间的通信。 使用神卓互联内网穿透&#xff0c;您可以将内网设备暴露在公网上…

苹果也顶不住了,警告睡觉时不要将iPhone放在旁边,有自燃的风险

苹果或许是由于近几年来&#xff0c;iPhone自燃导致损失的案例增加&#xff0c;外媒报道指苹果警告用户不要将充电的iPhone放在身边&#xff0c;特别是睡觉的时候更不要将充电中的iPhone放在身边&#xff0c;这可能导致危险。 这几年iPhone自燃的事件屡屡有报道&#xff0c;甚至…

(黑客)自学

一、前言&#xff1a; 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以…

「UG/NX」Block UI 超级截面SuperSection

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

【Freertos基础入门】队列(queue)的使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、队列是什么&#xff1f;二、队列的操作二、示例代码总结 前言 本系列基于stm32系列单片机来使用freerots FreeRTOS是一个广泛使用的开源实时操作系统&…

如何在Java实现TCP方式发送和接收Socket消息(多线程模式)

目录 导言&#xff1a;正文&#xff1a;1. 创建Server端&#xff1a;2. 创建Client端&#xff1a;3. 多线程模式&#xff1a; 代码示例Server端代码示例&#xff1a;Client端代码示例&#xff1a;同步模式发送TCP消息异步模式 结论&#xff1a; 导言&#xff1a; 在Java编程中…

POJ 3641 Pseudoprime numbers 米勒拉宾素数判定+埃氏筛法

一、思路 对于输入的一个数字n和a&#xff0c;我们用快速幂判断 n ^ a % n 是否等于n&#xff0c;如果不等于直接输出no&#xff0c;等于的话&#xff0c;再判断n是否为素数&#xff0c;如果n为素数&#xff0c;输出no&#xff0c;否则输出yes。 判断素数的话&#xff0c;对于…