`

java基础之小数问题

 
阅读更多

1.关于取整运算

 

private static void getInt() {
     double i=2, j=2.1, k=2.5, m=2.9;   
     System.out.println("------------------取整-------------------");
     System.out.println("舍掉小数取整:Math.floor(2)=" + (int)Math.floor(i));
     System.out.println("舍掉小数取整:Math.floor(2.1)=" + (int)Math.floor(j));
     System.out.println("舍掉小数取整:Math.floor(2.5)=" + (int)Math.floor(k));
     System.out.println("舍掉小数取整:Math.floor(2.9)=" + (int)Math.floor(m));

     System.out.println("舍掉小数取整:Math.floor(-2)=" + (int)Math.floor(-i));
     System.out.println("舍掉小数取整:Math.floor(-2.1)=" + (int)Math.floor(-j));
     System.out.println("舍掉小数取整:Math.floor(-2.5)=" + (int)Math.floor(-k));
     System.out.println("舍掉小数取整:Math.floor(-2.9)=" + (int)Math.floor(-m));

     System.out.println("------------------凑整-------------------");
     System.out.println("凑整:Math.ceil(2)=" + (int)Math.ceil(i));
     System.out.println("凑整:Math.ceil(2.1)=" + (int)Math.ceil(j));
     System.out.println("凑整:Math.ceil(2.5)=" + (int)Math.ceil(k));
     System.out.println("凑整:Math.ceil(2.9)=" + (int)Math.ceil(m));

     System.out.println("------------------四舍五入取整-------------");
     System.out.println("四舍五入取整:(2)=" + 
                         new BigDecimal("2").setScale(0, BigDecimal.ROUND_HALF_UP));
     System.out.println("四舍五入取整:(2.1)=" + 
                         new BigDecimal("2.1").setScale(0, BigDecimal.ROUND_HALF_UP));
     System.out.println("四舍五入取整:(2.5)=" + 
                         new BigDecimal("2.5").setScale(0, BigDecimal.ROUND_HALF_UP));
     System.out.println("四舍五入取整:(2.9)=" + 
                         new BigDecimal("2.9").setScale(0, BigDecimal.ROUND_HALF_UP));
 }

 结果:

------------------取整-------------------
舍掉小数取整:Math.floor(2)=2
舍掉小数取整:Math.floor(2.1)=2
舍掉小数取整:Math.floor(2.5)=2
舍掉小数取整:Math.floor(2.9)=2
舍掉小数取整:Math.floor(-2)=-2
舍掉小数取整:Math.floor(-2.1)=-3
舍掉小数取整:Math.floor(-2.5)=-3
舍掉小数取整:Math.floor(-2.9)=-3
------------------凑整-------------------
凑整:Math.ceil(2)=2
凑整:Math.ceil(2.1)=3
凑整:Math.ceil(2.5)=3
凑整:Math.ceil(2.9)=3
------------------四舍五入取整-------------
四舍五入取整:(2)=2
四舍五入取整:(2.1)=2
四舍五入取整:(2.5)=3
四舍五入取整:(2.9)=3

 

注意BigDecimal构造方法:

 

public BigDecimal(double 将 double 转换为 BigDecimal,后者是 double 的二进制浮点值准确的十进制表示形式。返回的 BigDecimal 的标度是使 (10scale × val) 为整数的最小值

 

  • 此构造方法的结果有一定的不可预知性。有人可能认为在 Java 中写入 new BigDecimal(0.1) 所创建的 BigDecimal 正好等于 0.1(非标度值 1,其标度为 1),但是它实际上等于 0.1000000000000000055511151231257827021181583404541015625。这是因为 0.1 无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入 到构造方法的值不会正好等于 0.1(虽然表面上等于该值)。
  • 另一方面,String 构造方法是完全可预知的:写入 new BigDecimal("0.1") 将创建一个 BigDecimal,它正好 等于预期的 0.1。因此,比较而言,通常建议优先使用String 构造方法。当 double 必须用作 BigDecimal 的源时,请注意,此构造方法提供了一个准确转换;它不提供与以下操作相同的结果:先使用 Double.toString(double) 方法,然后使用 BigDecimal(String) 构造方法,将 double 转换为 String。要获取该结果,请使用 static valueOf(double) 方法。

 

分享到:
评论

相关推荐

    JAVA案例 第二篇:针对大数值取整数和小数、保留几位小数、特定位数的数值、自幂数.docx

    我们可以想象一下:既然能够判断一个数值是否为整数,那么就应该有机会将它的整数部分和小数部分分割开来,也就是我们常说的取整(它同时包含了取小数),在我们初学JAVA时,我们常用的方法是强制转换,或者利用...

    一些关于java的基础常用-保留两为小数

    如何在JAVA程序中保留两为小数,在程序设计中处理数学运算的规则的时候有时要求保留多少位小数的问题,本资源就针对这个问题

    java 基础与面向对象

    java 基础与面向对象的ppt课件 char(字符型) 用于存储单个字符 如:性别‘男’、‘女’,电灯‘开’、‘关’ int(整型) 用于存储整数 如:一天的时间是24小时,一月份有31天 double(双精度) 用于存储小数 如...

    JAVA_API1.6文档(中文)

    java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....

    Java 1.6 API 中文 New

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    java api最新7.0

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    JavaAPI1.6中文chm文档 part1

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    Java面试宝典2013版pdf

    Java面试宝典pdf,面试必备,学习Java重点,回顾基础知识。

    马士兵JAVA笔记(全).docx

    本资源是马士兵的JAVA笔记,涵盖了JAVA语言的基础知识,包括标识符、常量、变量、数据类型、运算符、控制流语句等。 标识符是JAVA中的一种符号,用于命名变量、方法、类等。标识符由字母、下划线、美元符、数字组成...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    Java实验-基本数据类型及操作

    Java基础数据类型及操作实验报告 Java是一种面向对象的编程语言,具有强大的数据类型系统。了解Java中的基本数据类型及其操作是java编程的基础。本实验报告将介绍Java中的基本数据类型、数据类型转换、控制台输入...

    java个人基础列子整理

    都是些简单的东西 对刚刚入门的Java学者有很大的帮助

    JavaAPI中文chm文档 part2

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    java jdk-api-1.6 中文 chmd

    java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....

    《JAVA程序设计》期末考试试题_(三).

    本文档总结了JAVA程序设计期末考试试题(三),涵盖了JAVA语言的基础知识点,包括标识符、关键字、变量、数据类型、运算符、控制流程、数组、字符串、异常处理等。 一、单项选择题 1. 在 Java 中,标识符可以是...

    JAVA基础 第一篇:素数、合数、质数分解、最大公约数、最小公倍数.docx

    1、定义方法,而非笼统写入main()方法中,以...2、利用BigDecimal本身的特性“分割”小数点前后的整数、小数,尽量避免精度问题; 3、利用质数与合数的特点、相应等式的特点进行数字分析,这对以后的代码编写有帮助。

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    java_se_learning:java se learning project JAVA基础学习笔记和演示案例代码项目

    韩顺平java笔记完整版-基础篇 ##数据类型 JAVA中的基本数据类型有四类八种:整数类型、小数类型、字符类型、布尔类型。 整数类型:byte、short、int、long 占用字节: 1 2 4 8 小数类型:float、double 占用字节...

    Calculater.java

    本文主要写的是java实现的一个简易计算器,有基础的加、减、乘、除、乘方、小括号以及清零功能,支持负数和小数的计算,代码完全是自己编写,使用自己的想法实现其功能,如果写的有不好的地方希望大家体谅。...

Global site tag (gtag.js) - Google Analytics