精华内容
下载资源
问答
  • Java 小数精确计算问题System.out.println(2.00 -1.10);//0.8999999999999999上面的计算出的结果不是0.9,而是一连串的小数。问题在于1.1 这个数字不能被精确表示为一个double,因此它被表示为最接近它的double 值,...

    Java 小数精确计算问题

    System.out.println(2.00 -1.10);//0.8999999999999999

    上面的计算出的结果不是0.9,而是一连串的小数。问题在于1.1 这个数字不能被精确表示

    为一个double,因此它被表示为最接近它的double 值,该程序从2 中减去的就是这个值,

    但这个计算的结果并不是最接近0.9 的double值。

    一般地说,问题在于并不是所有的小数都可以用二进制浮点数精确表示。

    二进制浮点对于货币计算是非常不适合的,因为它不可能将1.0 表示成10 的其他任何负次

    幂。

    解决问题的第一种方式是使用货币的最小单位(分)来表示:System.out.println(200-110);//90

    第二种方式是使用BigDecimal,但一定要用BigDecimal(String)构造器,而千万不要用

    BigDecimal(double)来构造(也不能将float或double型转换成String再来使用BigDecimal(String)

    来构造,因为在将float或double转换成String时精度已丢失)。例如new BigDecimal(0.1),它

    将返回一个BigDecimal,也即

    0.1000000000000000055511151231257827021181583404541015625,正确使用BigDecimal,程

    序就可以打印出我们所期望的结果0.9:

    System.out.println(new BigDecimal("2.0").subtract(new BigDecimal("1.10")));// 0.9

    另外,如果要比较两个浮点数的大小,要使用BigDecimal的compareTo方法。

    相关文档:

    public class Test {

    public static void main(String args[]) {

    System.out.println(Integer.toBinaryString(20));   //十进制-->2进制

    System ......

    受到“15年你积累了什么”一文的震动,特别收集该文学习

    Java gc

    关键字: java gc, 垃圾回收机制

    1.JVM的gc概述

    gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言并不要求jvm有gc,也没有规定gc如何工作。不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收 ......

    JAVA文件操作总结

    File类

    File f = new File(path);

    path为实际路径,该路径可以是文件,或文件夹,也可以是不存在的。

    f.exists() 可以判断该路是否存在。

    f.isDirectory() 可以判断是否是文件夹。

    f.mkdirs(); 递归创建文件夹

    File和输入输出流之间纽带FileInutStream,FileOutputStream

    URL url = new URL(strUr ......

    昨天看到这样一篇帖子,讨论类加载顺序的,也可以说是初始化顺序的,今天早上找不到了,本来想回复的,现在自己写博客回复了,呵呵

    public class Singleton {

    private static Singleton obj = new Singleton();

    public static int counter1 ;

    public static int counter2 = 0;& ......

    annotations : 注释

    好处

    1.文档编制

    2.编译器检查

    3.代码分析

    JSR 175 是编程语言的元数据工具,为将元数据合并到核心java语言中提供正式理由和说明

    基本知识:

    注释采用"@"标记形式,后面是注释名称,然后在需要数据时,通过name=value对向注释提供数据

    注释的三个基本种类:

    标记注释 ......

    展开全文
  • Java小数截断

    千次阅读 2017-11-21 15:37:07
    本文对Java小数截断的几种方式进行了总结。


    Java计算数据小数截断,目前提供了下面几种方式,这些方式截断小数如下:



    用的测试代码如下,里面有对几种方式的注释心得

    public class Test {
    
    	public static void main(String[] args) {
    		BigDecimal bigDecimal1 = new BigDecimal(-25);
    		BigDecimal bigDecimal2 = new BigDecimal(7);
    
    		// 无论正数或者负数都进1
    		BigDecimal bigDecimal3 = bigDecimal1.divide(bigDecimal2, 2, BigDecimal.ROUND_UP);
    		System.out.println("bigDecimal3:" + bigDecimal3);
    
    		// 无论正数或者负数直接舍入,任何情况都不进1
    		BigDecimal bigDecimal4 = bigDecimal1.divide(bigDecimal2, 2, BigDecimal.ROUND_DOWN);
    		System.out.println("bigDecimal4:" + bigDecimal4);
    
    		// 正数在舍入的时候都进1;负数直接舍掉
    		BigDecimal bigDecimal5 = bigDecimal1.divide(bigDecimal2, 2, BigDecimal.ROUND_CEILING);
    		System.out.println("bigDecimal5:" + bigDecimal5);
    
    		// 正数直接舍掉,负数舍入时进1
    		BigDecimal bigDecimal6 = bigDecimal1.divide(bigDecimal2, 2, BigDecimal.ROUND_FLOOR);
    		System.out.println("bigDecimal6:" + bigDecimal6);
    
    		// 四舍五入
    		BigDecimal bigDecimal7 = bigDecimal1.divide(bigDecimal2, 2, BigDecimal.ROUND_HALF_UP);
    		System.out.println("bigDecimal7:" + bigDecimal7);
    		
    		// 四舍五入
    		BigDecimal bigDecimal8 = bigDecimal1.divide(bigDecimal2, 2, BigDecimal.ROUND_HALF_DOWN);
    		System.out.println("bigDecimal8:" + bigDecimal8);
    		
    		// 四舍五入
    		BigDecimal bigDecimal9 = bigDecimal1.divide(bigDecimal2, 2, BigDecimal.ROUND_HALF_EVEN);
    		System.out.println("bigDecimal9:" + bigDecimal9);
    		
    
    	}

    展开全文
  • 小数精确计算System.out.println(2.00 -1.10);//0.8999999999999999上面的计算出的结果不是 0.9,而是一连串的小数。问题在于1.1这个数字不能被精确表示为一个double,因此它被表示为最接近它的double值,该程序从2...

    小数精确计算

    System.out.println(2.00 -1.10);//0.8999999999999999

    上面的计算出的结果不是 0.9,而是一连串的小数。问题在于1.1这个数字不能被精确表示为一个double,因此它被表

    示为最接近它的double值,该程序从2中减去的就是这个值,但这个计算的结果并不是最接近0.9的double值。

    一般地说,问题在于并不是所有的小数都可以用二进制浮点数精确表示。

    二进制浮点对于货币计算是非常不适合的,因为它不可能将1.0表示成10的其他任何负次幂。

    解决问题的第一种方式是使用货币的最小单位(分)来表示:

    System.out.println(200-110);//90

    第二种方式是使用BigDecimal,但一定要用BigDecimal(String)构造器,而千万不要用 BigDecimal(double)来构造(也不能将float或double型转换成String再来使用BigDecimal(String)来构造,因为在将float或double转换成String时精度已丢失)。

    例如new BigDecimal(0.1),

    它将返回一个BigDecimal,

    也即0.1000000000000000055511151231257827021181583404541015625,

    正确使用BigDecimal,程序就可以打印出我们所期

    望的结果0.9:

    System.out.println(new BigDecimal("2.0").subtract(new BigDecimal("1.10")));// 0.9

    另外,如果要比较两个浮点数的大小,要使用BigDecimal的compareTo方法。

    展开全文
  • 2016-09-01 01:19最佳答案楼上的全不明白楼主的意思,楼主要的...严重BS楼上的,尤其是说java语言的那位。我来告诉你这个问题用递推解决首先要你承认一个公式,我是习惯pascal语言的,c++怕写错,反正只是算法,你忍...

    2016-09-01 01:19最佳答案

    楼上的全不明白楼主的意思,楼主要的是算法,不是程序你们懂吗!!!

    我只能说你们不懂什么叫真正的算法,你们只是计算机的傀儡,我看了你们回答非常生气,高校教出来的就是这种“人才”,连算法都不懂。还不如我一高中生。严重BS楼上的,尤其是说java语言的那位。

    我来告诉你

    这个问题用递推解决

    首先要你承认一个公式,我是习惯pascal语言的,c++怕写错,反正只是算法,你忍一下。

    不知道你要的算法是大整数对long取余还是大整数对大整数取余。

    先说对long取余,这个简单

    先承认两个公式:ab mod c=((a mod c)(b mod c)) mod c

    (a+b) mod c=(a mod c+b mod c) mod c

    然后递推,先算1 mod c,然后10 mod c ,100 mod c。。。用数组存一下,递推方法是10^n mod c=((10^(n-1) mod c)*10) m禒肌操可鬲玖叉雪常磨od c

    再加,让k=0,

    for a:=1 to l do

    k:=(k+num[a]*exp10[a]) mod c

    这样最后k就是结果。

    补充:我不知道你说哪里耗时间,这个算法是位数的一次函数。

    再说大整数对大整数取余,这个需要模仿你平常做的除法来做高精度除法,说明白了就是模拟除法,这个没什么好说的,只要你编程能力足够就写得出来,你可以上网上搜一下,我这就不写了,因为我也不能保证一次写对,因为写一个高精度除法需要高精度加法和乘法,代码稍微有点繁。

    不bs楼上的了,我错了。lrj当然认识,见过他很多回了。我不是你说的那种被动接受的人,我们学校没有人懂,全部都是自学的,看到了你说用java解决很生气而己,楼主的意思是算法。

    至于oier,我们都很崇拜lrj,市面上基本没有什么适合初学者的书,资来源是网络。

    像很多高校,教出来的学计算机系的“程序员”根本不懂算法,导致很多程序效率低下,比如我曾看到一个ip地址数据库这位“牛”用o(n)的算法扫描找对应的ip地址,然后改成其它方法了居然还很高兴地说现在10几次就可以确定了。再比如我们的“老师”,从学校计算机系毕业,来了什么也不懂,最垃圾的模拟都不会,背包都不知道是啥,所以我内心里对一些人排斥。对不起。

    但是有一点我不认同,不是大多数的oier都像你说的那样。

    还有,就是我很不喜欢你的明白楼主是什么意思却不去回答而用java塘塞过去。

    那不是狂妄,那是失望。这种问题竟然要等到我一个高中生来回答,而上面竟然又有人用java搪塞,我对现在算法普及程序感到非常的失望,很伤心。

    一楼我不明白的就是你怎么估计?相当于你说你去买份饭没说怎么做,相当模糊,楼主要的是具体的算法。

    展开全文
  • 本文实例为大家分享了java指定精确小数位的具体代码,供大家参考,具体内容如下java代码:public class App2 {public static void main(String[] args) {String val = checkNumber("10.1234155", 2, 6).toString();...
  • java小数计算

    千次阅读 2019-02-24 21:19:51
    我也知道小数使用double与float会造成精度问题,但是一直都没有关心到底应该如何解决,最近工作中碰到了一个上千万的小数计算,才发现使用double计算小数不仅仅精度会错,在数值过大的情况下会变成科学计数法表示。...
  • java小数相关

    2018-03-16 18:51:32
    小数保留后k位方法 import java.util.Scanner;//输入 import java.math.BigInteger;//大整数类 import java.math.BigDecimal;//大浮点数类 public class Main { public static void main(String[] args) { ...
  • 例:new java.text.DecimalFormat(”#.00″).format(3.1415926) #.00 表示两位小数 #.0000四位小数 以此类推… 方式三: double d = 3.1415926; String result = String .format(”%.2f”); %.2f %. 表示 小数点前...
  • Java小数问题

    2018-03-14 16:27:17
    java 两个整数相除保留两位小数java中,当两个整数相除时,由于小数点以后的数字会被截断,运算结果将为整数,此时若希望得到运算结果为浮点数,必须将两整数其一或是两者都强制转换为浮点数。 例如: (float)a/b...
  • 同样,大多数开发人员也容易忽略java.math.BigDecimal 所提供的任意精度的小数 ―大多数应用程序不使用它们。然而,在以整数为主的程序中有时确实会出人意料地需要表示非整型数据。例如,JDBC使用 B...
  • java 小数相加

    2019-09-17 03:32:25
    import java.math.BigDecimal; /** * 类描述: * @version 1.0 * @author chenairu * */ public class TM { public static void main(String[] args) { ...
  • Java中的小数运算与精度丢掉float、double类型的问题咱们都知道,核算机是运用二进制存储数据的。而往常日子中,大多数情况下咱们都是运用的十进制,因而核算机显示给咱们看的内容大多数也是十进制的,这就使得许多...
  • java 小数处理

    2016-05-20 14:18:16
    保留两位小数{ 方法一:{  double c=3.154215;  Java.text.DecimalFormat myformat=new java.text.DecimalFormat("0.00");  String str = myformat.format(c);  } 方式二:{  java.text....
  • float、double类型的问题我们都知道,计算机是使用二进制存储数据的。而平常生活中,大多数情况下我们...我们先来看看十进制小数转二进制小数的方法对小数点以后的数乘以2,会得到一个结果,取结果的整数部分(不是1...
  • java 小数分数转换

    2020-05-05 23:12:33
    从标准输入中输入一个小数,编写程序将其转换成相应的分数显示,即转换为几又几分之几。 要求: 1、输入的小数包括整数部分、小数点和小数部分;整数部分和小数部分最多有7位数字;整数部分可以为0,若整数部分大于...
  • 对于正小数而言,可以考带+号,并考虑两种情况,第一个数字为0和第一个数字不为0,第一个数字为0时,则小数点后面应该不为0,第一个数字不为0时,小数点后可以为任意数字5. 对于负小数而言,必须带负号,其余都同.....
  • public class Test {public static void main(String...// 舍掉小数取整System.out.println("舍掉小数取整:Math.floor(3.856)=" + (int) Math.floor(i));// 四舍五入取整System.out.println("四舍五入取整:(3.856)="...
  • 求整数除法小数点后第n位开始的3位数位数不足的补0,如0.125小数第3位后三位:0.12500→500输入格式:a b n,空格分开,a是被除数,b是除数,n是小数后的位置输出格式:3位数字,a÷b小数后第n位开始的3位数字样例:输入:1 8 1...
  • public classTest {//在java中如何把小数转化成百分数public static void main(String[] args) {NumberFormat num = NumberFormat.getPercentInstance();num.setMaximumIntegerDigits(3); //小数点前面...
  • import java.util.Scanner;public class ChangeToFenshuDemo {public static int getGongYueShu(int a, int b) {//求两个数的最大公约数int t = 0;if(a < b){t = a;a = b;b = t;}int c = a % b;if(c == 0){return...
  • import java.math.BigDecimal;import java.math.RoundingMode;import java.text.DecimalFormat;import java.text.NumberFormat;public class DoubleTest {/*** 保留两位小数,四舍五入的一个老土的方法* @pa...
  • Java小数位数问题

    2018-04-18 02:33:29
    Java在做变量自等的时候,可能会发生保留小数位数不足的情况。如下代码,保留3位小数,实际运行中,发现有些结果是2位的,有些是3位的。avg = sum_time/count; avg = (double)(Math.round(avg * 10000)/10000.0); ...
  • 导读热词下面是编程之家 jb51.cc 通过网络收集整理的代码...import java.text.DecimalFormat;public class NumberUtil {public void roundNumber(double numberToRound) {DecimalFormat df = new DecimalFormat("0....
  • 我知道这个问题有很多重复,但请先看一下声明,而不是标记它已经回答了:)为了截断双精度值2个小数位,我使用了两种方法,这些方法大多数都是提到的.它们如下//this oneDecimalFormat dtime = new DecimalFormat("#.##");...
  • 例子: 0.813*2 整数部分: 1 小数部分: 0.626 0.626*2 整数部分: 1 小数部分: 0.252 0.252*2 整数部分: 0 小数部分: 0.504 0.504*2 整数部分: 1 小数部分: 0.008 0.008*2 整数部分: 0 小数部分: 0.016 代码实现: ...
  • java 小数精度问题

    千次阅读 2018-05-31 16:36:22
    1、原因由于浮点数在转化为二进制时无法运算完结,所以会无限循环下去,导致运算结果达不到期望值。例如:1.14,转化为二进制,然后再转回十进制就变成了:1....import java.math.BigDeci...
  • java小数精确计算

    2019-12-31 17:15:52
    double num1 = 1.0; double num2 = 0.8; BigDecimal a = new BigDecimal(String.valueOf(num1)); BigDecimal b = new BigDecimal(String.valueOf(num2)); BigDecimal bigDecimal = a.subtract(b);...
  • Java小数转换成百分数

    千次阅读 2017-10-17 19:56:20
    Java 两个整数相除保留两位小数,整数相除转百分比,根据hashMap中的value值进行排序。Java获取时间差,分钟差
  • 首先要明确一下转换规则:大数转小数,多出的高位部分会被截断。比如 int 占 4个byte(32 bit), byte占 1个byte(8bit), 那int 转 byte ,int 高位多出的那24个bit会被截断。例1:int b = 233; // 正整数强转System.out...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,691
精华内容 5,476
关键字:

java小数

java 订阅