当前位置:首页 » 编程语言 » java小数精确

java小数精确

发布时间: 2023-08-28 01:01:52

java中如何实现将float精确到小数点后两位

方法1:用Math.round计算,这里返回的数字格式的.

float price=89.89;
int itemNum=3;
float totalPrice=price*itemNum;
float num=(float)(Math.round(totalPrice*100)/100);//如果要求精确4位就*10000然后/10000

方法2:用DecimalFormat 返回的是String格式的.该类对十进制进行全面的封装.像%号,千分位,小数精度.科学计算.

float price=1.2;
DecimalFormat decimalFormat=new DecimalFormat(".00");//构造方法的字符格式这里如果小数不足2位,会以0补足.
String p=decimalFomat.format(price);//format 返回的是字符串

② Java中怎么把除法精确到小数点后100位

JAVA中如何对double或者键或知float的浮点数进行精度计算,
在JAVA中提供了多种参数来实现精度的不团滚同控制方式。
具体例子如下:
package com.soft4j.utility;

import java.math.BigDecimal;

/**
* 与小数位精度(四舍五入等)相关的一些常用工具方法.
*
* float/double的精度取稿消值方式分为以下几种: <br>
* java.math.BigDecimal.ROUND_UP <br>
* java.math.BigDecimal.ROUND_DOWN <br>
* java.math.BigDecimal.ROUND_CEILING <br>
* java.math.BigDecimal.ROUND_FLOOR <br>
* java.math.BigDecimal.ROUND_HALF_UP<br>
* java.math.BigDecimal.ROUND_HALF_DOWN <br>
* java.math.BigDecimal.ROUND_HALF_EVEN <br>
*
* @author stephen
* @version 1.0.0
*/
public final class RoundTool {

/**
* 对double数据进行取精度.
* <p>
* For example: <br>
* double value = 100.345678; <br>
* double ret = round(value,4,BigDecimal.ROUND_HALF_UP); <br>
* ret为100.3457 <br>
*
* @param value
* double数据.
* @param scale
* 精度位数(保留的小数位数).
* @param roundingMode
* 精度取值方式.
* @return 精度计算后的数据.
*/
public static double round(double value, int scale, int roundingMode) {
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(scale, roundingMode);
double d = bd.doubleValue();
bd = null;
return d;
}

/**
* 测试用的main方法.
*
* @param argc
* 运行参数.
*/
public static void main(String[] argc) {
//下面都以保留2位小数为例

//ROUND_UP
//只要第2位后面存在大于0的小数,则第2位就+1
System.out.println(round(12.3401,2,BigDecimal.ROUND_UP));//12.35
System.out.println(round(-12.3401,2,BigDecimal.ROUND_UP));//-12.35
//ROUND_DOWN
//与ROUND_UP相反
//直接舍弃第2位后面的所有小数
System.out.println(round(12.349,2,BigDecimal.ROUND_DOWN));//12.34
System.out.println(round(-12.349,2,BigDecimal.ROUND_DOWN));//-12.34
//ROUND_CEILING
//如果数字>0 则和ROUND_UP作用一样
//如果数字<0 则和ROUND_DOWN作用一样
System.out.println(round(12.3401,2,BigDecimal.ROUND_CEILING));//12.35
System.out.println(round(-12.349,2,BigDecimal.ROUND_CEILING));//-12.34
//ROUND_FLOOR
//如果数字>0 则和ROUND_DOWN作用一样
//如果数字<0 则和ROUND_UP作用一样
System.out.println(round(12.349,2,BigDecimal.ROUND_FLOOR));//12.34
System.out.println(round(-12.3401,2,BigDecimal.ROUND_FLOOR));//-12.35
//ROUND_HALF_UP [这种方法最常用]
//如果第3位数字>=5,则第2位数字+1
//备注:只看第3位数字的值,不会考虑第3位之后的小数的
System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_UP));//12.35
System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_UP));//12.34
System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_UP));//-12.35
System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_UP));//-12.34
//ROUND_HALF_DOWN
//如果第3位数字>=5,则做ROUND_UP
//如果第3位数字<5,则做ROUND_DOWN
System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_DOWN));//12.35
System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_DOWN));//12.34
System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_DOWN));//-12.35
System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_DOWN));//-12.34
//ROUND_HALF_EVEN
//如果第3位是偶数,则做ROUND_HALF_DOWN
//如果第3位是奇数,则做ROUND_HALF_UP
System.out.println(round(12.346,2,BigDecimal.ROUND_HALF_EVEN));//12.35
System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_EVEN));//12.35
}
}
相关文章:

《Double精度的常用设置》
http://henry406.javaeye.com/blog/459669

import java.text.DecimalFormat;
import java.math.BigDecimal;
public class Test_Double{
public static void main(String[] args){
//-----方法1--------四舍五入 round对负数是五舍六入
double d_1 = 123.9;
System.out.println("d_1 = "+Math.round(d_1));
//-------方法2------------------
DecimalFormat decfmt = new DecimalFormat("##0.00");
System.out.println(decfmt.format(1.33482222));
//--------方法3--------------
double x = 1.33345;
java.text.NumberFormat formate = java.text.NumberFormat.getNumberInstance();
formate.setMaximumFractionDigits(3);//设定小数最大为数,那么显示的最后会四舍五入的
String m = formate.format(x);
System.out.println(m);
//--------方法4--------------
BigDecimal bd = new BigDecimal(1.234543);
bd = bd.setScale(3,BigDecimal.ROUND_HALF_EVEN);
double d = bd.doubleValue();
System.out.println(d);
//--------取消科学计数法-------------
Double dValue = Double.valueOf("276363652844.8477474");
System.out.println(dValue);
BigDecimal original = new BigDecimal(dValue.doubleValue());
BigDecimal result = original.setScale(2, BigDecimal.ROUND_HALF_DOWN);
String test = result.toString();
System.out.println(test);
}
}

③ JAVA 中除法后小数精度问题

你说的这个问题涉及到数字精度问题,在程序中,数字运算总是低精度的向高精度的自动转化。比如(int)/(float)就会得到你想要的小数数位,这是由数字在计算机中的运算方式决定的。如果你用3/5.0或者3.0/5,你顷前就可以得到你想要的小数。
在计算机中,整型(int)和浮点(float,double)的表示形式各不相同,占用内存空间也不同,在运算时,为了得到正确的结果,就要进行对位,如果数据类型不一致,就要进行转化。在硬件层面上就是把占用内存少的整型向浮点转换,也就是为这个整型添加额外的字节参与运算,尽管这些字节中都是0,这是数字精度的问题。
现在是两个整形数,轮世运算时,计算机认为不需要腊乎肢进行数据类型的转化,所以就得到你见到的结果。

热点内容
构成c语言程序的基本单位 发布:2025-02-04 13:49:53 浏览:987
如何修改已经更改的密码 发布:2025-02-04 13:38:38 浏览:772
唐dm2021买哪个配置划算 发布:2025-02-04 13:38:38 浏览:627
真空压缩重 发布:2025-02-04 13:38:37 浏览:639
alias脚本 发布:2025-02-04 13:38:03 浏览:739
linux终端字符 发布:2025-02-04 12:52:40 浏览:734
c语言程序设计mobi 发布:2025-02-04 12:51:55 浏览:258
rsa算法c语言 发布:2025-02-04 12:50:36 浏览:785
阿里云服务器托管破解 发布:2025-02-04 12:47:43 浏览:257
汽车都有什么配置 发布:2025-02-04 12:42:51 浏览:458