精华内容
下载资源
问答
  • float和double只能用来做科学计算或者是工程计算,在商业计算...方法类型描述public BigDecimal(double val)构造double表示形式转换为BigDecimalpublic BigDecimal(int val)构造将int表示形式转换为BigDecimalpub...

    float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal。

    而且使用BigDecimal类也可以进行大数的操作。

    方法

    类型

    描述

    public BigDecimal(double val)

    构造

    将double表示形式转换为BigDecimal

    public BigDecimal(int val)

    构造

    将int表示形式转换为BigDecimal

    public BigDecimal(String val)

    构造

    将字符串表示形式转换为BigDecimal

    public BigDecimal add(BigDecimal augend)

    普通

    加法

    public BigDecimal subtract(BigDecimal subtrahend)

    普通

    减法

    public BigDecimal multiply(BigDecimal multiplicand)

    普通

    乘法

    public BigDecimal divide(BigDecimal divisor)

    普通

    除法

    一、 BigDecimal的计算

    金额的计算BigDecimal类

    double d = 9.84;

    double d2 = 1.22;

    //注意需要使用BigDecimal(String val)构造方法

    BigDecimal bigDecimal = new BigDecimal(Double.toString(d));

    BigDecimal bigDecimal2 = new BigDecimal(Double.toString(d2));

    //加法

    BigDecimal bigDecimalAdd = bigDecimal.add(bigDecimal2);

    double add = bigDecimalAdd.doubleValue();

    //减法

    BigDecimal bigDecimalSubtract = bigDecimal.subtract(bigDecimal2);

    double subtract = bigDecimalSubtract.doubleValue();

    //乘法

    BigDecimal bigDecimalMultiply = bigDecimal.multiply(bigDecimal2);

    double multiply = bigDecimalMultiply.doubleValue();

    //除法

    int scale = 2;//保留2位小数

    BigDecimal bigDecimalDivide = bigDecimal.divide(bigDecimal2, scale, BigDecimal.ROUND_HALF_UP);

    double divide = bigDecimalDivide.doubleValue();

    //格式化

    double format = 12343171.6;

    //获取常规数值格式

    NumberFormat number = NumberFormat.getNumberInstance();

    String str = number.format(format);//12,343,171.6

    //获取整数数值格式

    NumberFormat integer = NumberFormat.getIntegerInstance();

    str = integer.format(format);//如果带小数会四舍五入到整数12,343,172

    //获取货币数值格式

    NumberFormat currency = NumberFormat.getCurrencyInstance();

    currency.setMinimumFractionDigits(2);//设置数的小数部分所允许的最小位数(如果不足后面补0)

    currency.setMaximumFractionDigits(4);//设置数的小数部分所允许的最大位数(如果超过会四舍五入)

    str = currency.format(format);//¥12,343,171.60

    //获取显示百分比的格式

    NumberFormat percent = NumberFormat.getPercentInstance();

    percent.setMinimumFractionDigits(2);//设置数的小数部分所允许的最小位数(如果不足后面补0)

    percent.setMaximumFractionDigits(3);//设置数的小数部分所允许的最大位数(如果超过会四舍五入)

    str = percent.format(format);//1,234,317,160.00%

    二、典型的Double类型的数值运算

    /**

    * double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型

    * 整型地方法适合于货币精度已知的情况,比如12.11+1.10转成1211+110计算,最后再/100即可

    * 以下是摘抄的BigDecimal方法:

    */

    public class DoubleUtil implements Serializable {

    private static final long serialVersionUID = -3345205828566485102L;

    // 默认除法运算精度

    private static final Integer DEF_DIV_SCALE = 2;

    /**

    * 提供精确的加法运算。

    *

    * @param value1 被加数

    * @param value2 加数

    * @return 两个参数的和

    */

    public static Double add(Double value1, Double value2) {

    BigDecimal b1 = new BigDecimal(Double.toString(value1));

    BigDecimal b2 = new BigDecimal(Double.toString(value2));

    return b1.add(b2).doubleValue();

    }

    /**

    * 提供精确的减法运算。

    *

    * @param value1 被减数

    * @param value2 减数

    * @return 两个参数的差

    */

    public static double sub(Double value1, Double value2) {

    BigDecimal b1 = new BigDecimal(Double.toString(value1));

    BigDecimal b2 = new BigDecimal(Double.toString(value2));

    return b1.subtract(b2).doubleValue();

    }

    /**

    * 提供精确的乘法运算。

    *

    * @param value1 被乘数

    * @param value2 乘数

    * @return 两个参数的积

    */

    public static Double mul(Double value1, Double value2) {

    BigDecimal b1 = new BigDecimal(Double.toString(value1));

    BigDecimal b2 = new BigDecimal(Double.toString(value2));

    return b1.multiply(b2).doubleValue();

    }

    /**

    * 提供(相对)精确的除法运算,当发生除不尽的情况时, 精确到小数点以后10位,以后的数字四舍五入。

    *

    * @param dividend 被除数

    * @param divisor 除数

    * @return 两个参数的商

    */

    public static Double divide(Double dividend, Double divisor) {

    return divide(dividend, divisor, DEF_DIV_SCALE);

    }

    /**

    * 提供(相对)精确的除法运算。 当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。

    *

    * @param dividend 被除数

    * @param divisor 除数

    * @param scale 表示表示需要精确到小数点以后几位。

    * @return 两个参数的商

    */

    public static Double divide(Double dividend, Double divisor, Integer scale) {

    if (scale < 0) {

    throw new IllegalArgumentException("The scale must be a positive integer or zero");

    }

    BigDecimal b1 = new BigDecimal(Double.toString(dividend));

    BigDecimal b2 = new BigDecimal(Double.toString(divisor));

    return b1.divide(b2, scale,RoundingMode.HALF_UP).doubleValue();

    }

    /**

    * 提供指定数值的(精确)小数位四舍五入处理。

    *

    * @param value 需要四舍五入的数字

    * @param scale 小数点后保留几位

    * @return 四舍五入后的结果

    */

    public static double round(double value,int scale){

    if(scale<0){

    throw new IllegalArgumentException("The scale must be a positive integer or zero");

    }

    BigDecimal b = new BigDecimal(Double.toString(value));

    BigDecimal one = new BigDecimal("1");

    return b.divide(one,scale, RoundingMode.HALF_UP).doubleValue();

    }

    }

    补充:Java存储金额解决方案BigDecimal

    使用BigDecimal来存储金额数据,数据库中使用decimal类型,长度18,小数点2。

    在JPA中创建时如下:

    @Column(columnDefinition="decimal(18,2)")

    private BigDecimal price; //商品价格

    在数据库中创建时如下:

    lhx4jqvwiw2.jpg

    常用构造器:

    BigDecimal(double) 创建一个具有参数所指定双精度值的对象

    BigDecimal(long) 创建一个具有参数所指定长整数值的对象

    BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象

    常用方法:加减乘除

    add(BigDecimal) BigDecimal对象中的值相加,返回BigDecimal对象

    subtract(BigDecimal) BigDecimal对象中的值相减,返回BigDecimal对象

    multiply(BigDecimal) BigDecimal对象中的值相乘,返回BigDecimal对象

    divide(BigDecimal) BigDecimal对象中的值相除,返回BigDecimal对象

    常用方法:数据转换

    toString() 将BigDecimal对象中的值转换成字符串

    doubleValue() 将BigDecimal对象中的值转换成双精度数

    floatValue() 将BigDecimal对象中的值转换成单精度数

    longValue() 将BigDecimal对象中的值转换成长整数

    intValue() 将BigDecimal对象中的值转换成整数

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持聚米学院。如有错误或未考虑完全的地方,望不吝赐教。

    展开全文
  • 这个我们可以这样理解,当我们在平时考试中怎么将十进制转换为二进制,我们利用除2求余数的方法,现在我们编写一个代码来完成这个转换 #include &lt;stdio.h&gt; void main() { int N; int b = -1; ...

    这个我们可以这样理解,当我们在平时考试中怎么将十进制转换为二进制,我们利用除2求余数的方法,现在我们编写一个代码来完成这个转换

    #include <stdio.h>
    
    void main()
    {
      int N;
      int b = -1;
      int c[100];
      int i = 0;
      
     
     printf("输入十进制数:");
     scanf("%d",&N);
     
     for(i=0;N>0;i++)
     {
     
       c[i]=N%2;//这里和下面的一句所程序的核心,也是除2法
       N=N/2;
       b++;
     }
    
     for(b;b>=0;b--)//高位在数组前面,低位在数组后,所以用--来自减
     {
      printf("%d",c[b]);
     }
    }

     

     

    这里我调试了很久,打印的时候循环要减去1,要不然程序会跑飞。

    展开全文
  • 今天遇到的问题可以说是工作中遇到比较典型的java基础问题,服务端返回的数据转换成##.##格式的形式显示。咋一看功能要求不麻烦,一开始的时候展示原始数据,没什么好说的一切OK。后来因为代码优化写成##.##的格式...

    今天遇到的问题可以说是工作中遇到比较典型的java基础问题,将服务端返回的数据转换成##.##格式的形式显示。

    咋一看功能要求不麻烦,一开始的时候展示原始数据,没什么好说的一切OK。后来因为代码优化写成##.##的格式,这些就炸开锅了。

    怎么写都是错,怎么转都不对,这是为什么尼,我们从代码中找原因,首先看log日志,报出了java.lang.IllegalArgumentException: Bad class: class java.lang.String,那就很好办了,专家吗,最擅长的就是根据结果找原因,七搜八找终于得知是因为格式转换的时候用到了DecimalFormat

    原来的代码是这样的

    44137cbfdfcc

    怎么样身为专家的你是不是已经看到原因了,别急,关于这个东西我可是小白,还要好好研究研究。得出如下结果,format不可以将String类型进行格式化,需要对不同数据类型做转换。如下:

    44137cbfdfcc

    至此,问题完美解决。

    具体想DecimalFormat的格式说明了,什么数据类型了怎么转换了,小白就不多说了,专家自行研究 哈哈。

    展开全文
  • 我写了下面的代码想要获取游戏的剩余时间: ...运行输出正确,现在需要实现的就是剩余时间转换为百分比的形式显示。比如还剩50%。 那么8:30应该也显示为百分比的形式怎么实现? 谢谢。
  • 上次已经大家介绍过在java中怎么将二进制与十六进制进行转换?今天继续大家介绍一些与进制转换相关的内容,也就是在java中怎么表示八进制和十六进制?并且通过实际的代码为大家展示。大家都知道数据在计算机中的...

    上次已经为大家介绍过在java中怎么将二进制与十六进制进行转换?今天继续为大家介绍一些与进制转换相关的内容,也就是在java中怎么表示八进制和十六进制?并且通过实际的代码为大家展示。

    大家都知道数据在计算机中的表示,最终都会以二进制的形式存在,因此二进制的使用是十分广泛的。但是,存在一个问题,就是二进制数实在太长了。比如int类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:

    0000 0000 0000 0000 0110 0100

    由于上述的原因,C,C++,以及java中没有提供在代码内直接写二进制数的方法。

    接下来说回正题,八进制数的表达方法 。

    假设这个数是876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567,或12345670,那就不好判断了。因此规定,一个数如果要指明它采用八进制,必须在它前面加上一个0(零)。举个例子:123是十进制,但0123则表示采用八进制。这就是八进制数的表达方法。

    再举个例子,比如100,我们在代码中可以用平常的10进制表达,例如在变量初始化时:

    int a = 100;

    也可以写成:

    int a = 0144;

    需要特别注意的是,用八进制表达时,不能少了最前的那个0。否则计算机会全部当成10进制。但是,有一个地方使用八进制数时,却不能使用加0,那就是用于表达字符的“转义符”表达法。

    然后再说一下十六进制数的表达方法

    由于16进制数容易和10进制相混。举个例子:9876,就不好判断它是16进制或10进制。

    因此规定16进制数必须以0x开头。比如:0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也不区分大小写。(需要注意的是:0x中的0是数字0,而不是字母O)

    下面举例进行说明:int a = 0x100F;

    int b = 0x70 + a;

    以上就是关于在java中怎么表示八进制和十六进制的主要内容,并通过举例加以说明。如果你对java知识感兴趣,想要了解更多java基础和常见问题,敬请关注奇Q工具网。

    推荐阅读:

    展开全文
  • * 属性文件里内容转换为unicode码(只文件里的value转换为unicode,而key值不变)。 * 实现逻辑: 逐行读取文件内容,对每行内容进行转码(转成unicode形式),对转码的内容 * 又存入一队列中。最后使用队列...
  • //获得所要显示图片的编号id,并转换为整型 stmt.setInt(1,id); //要执行查询的SQL语句 rs = stmt.executeQuery(); ServletOutputStream sout =null; InputStream in=null; byte b[] =...
  • # 字符串形式的单词编号转化整数 dataset = dataset.map(lambda string: tf.string_to_number(string, tf.int32)) # 统计每个句子的单词数量,并与句子内容一起放入Dataset dataset = dataset.map(lambda...
  • 然后根据实际的机器环境把它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗? 31 1.4 新的64位机上的64位类型是什么样的? 32 指针声明 32 1.5 这样的声明有什么问题?char *p1, p2; 我在...
  • 然后根据实际的机器环境把它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗? 31 1.4 新的64位机上的64位类型是什么样的? 32 指针声明 32 1.5 这样的声明有什么问题?char *p1, p2; 我在...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    如果我指针值设为0,编译器可能会自动转换为非零的空指针内部表示。 5.20运行时的“nullpointerassignment”错误是什么意思?应该怎样捕捉它? 第6章 数组和指针 数组和指针的基本关系 6.1 我在一个...
  • 如果我指针值设为0,编译器可能会自动转换为非零的空指针内部表示。 62  5.20 运行时的“null pointer assignment”错误是什么意思?应该怎样捕捉它? 62 第6章 数组和指针 63 数组和指针的基本关系 ...
  • 如果我指针值设为0,编译器可能会自动转换为非零的空指针内部表示。  5.20运行时的“nullpointerassignment”错误是什么意思?应该怎样捕捉它?  第6章 数组和指针  数组和指针的基本关系 6.1 我在一个...
  • 如果我指针值设为0,编译器可能会自动转换为非零的空指针内部表示。 5.20运行时的“nullpointerassignment”错误是什么意思?应该怎样捕捉它? 第6章 数组和指针 数组和指针的基本关系 6.1 我在一个...
  • 如果我指针值设为0,编译器可能会自动转换为非零的空指针内部表示。  5.20 运行时的“null pointer assignment”错误是什么意思?应该怎样捕捉它? 第6章 数组和指针  数组和指针的基本关系  6.1 我在一个...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    然后根据实际的机器环境把它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗? 2  1.4 新的64位机上的64位类型是什么样的? 3 指针声明 3 1.5 这样的声明有什么问题?char *p1, p2; 我...
  • 然后根据实际的机器环境把它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗? 1.4 新的64位机上的64位类型是什么样的? 指针声明 1.5 这样的声明有什么问题?char *p1, p2; 我在使用p2的时候...
  • 然后根据实际的机器环境把它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗? 1.4 新的64位机上的64位类型是什么样的? 指针声明 1.5 这样的声明有什么问题?char *p1, p2; 我在使用p2的时候...
  • java常用工具类的使用

    热门讨论 2012-03-19 20:11:37
    该类的大部分构造器和方法都已经过时,但是该类使用非常方便,因此目前使用还很普遍,该类的另一个主要功能是,在数据库操作中,它允许毫秒值表示SQL DATE值,是数据库操作中java.sql.Date的父类。关于数据库...
  • 拿到题目以后解读数据就费了好长时间,数据中的名称全是英文,看了好半天才明白是怎么一回事想到定义数组发现定不了那么大,从网上学了malloc可是完全不知道引入文件后怎么将其导入数组内,试着将网上的程序拼接结果...
  • springmybatis

    2015-09-05 06:54:28
    其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如IUserOperation.class),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细...
  • 首页请求数据之后,根据热门度返回多个数据,数据存储到list集合中,并且转换为JSON格式数据,返回到页面,页面解析数据并且显示。  商场则负责显示所有的商品数据,实现侧边栏点击指定的类别之后,显示对应...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...
  • c#学习笔记.txt

    2008-12-15 14:01:21
    另外他对我上一集中说Microsoft越来越不要脸也极为生气,因为相比之下,Sun也不怎么样,微软已经C#提交设在日内瓦的ECMA(European Computer Manufacturers' Association,国际标准化机构欧洲电子计算机工业会)并...

空空如也

空空如也

1 2 3 4
收藏数 72
精华内容 28
关键字:

怎么将代码转换为int形式