double 类型运算会出现精度问题

要先转换为字符串,后进行运算,可以写个方法做乘法运算
public static double mul(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}
加法: return b1.add(b2).doubleValue();
减法: return b1.subtract(b2).doubleValue();

时间: 2024-08-24 19:25:56

double 类型运算会出现精度问题的相关文章

Double 类型运算时的精度问题

double 类型运算时的 计算的精度不高,经常会出现0.999999999999999这样的情况,那么就需要用BigDecimal   它是java提供的用来高精度计算的工具类 下面是对这个类的一个包装,方便使用: package cn.soft.util; import java.io.Serializable; import java.math.BigDecimal; import org.springframework.stereotype.Component; /** *类描述: do

java double类型计算出现的精度问题

 double d=100*1.005; 结果d的结果为100.49999999999999 怎么解决这种问题呢,用DecimalFormat,它对double类型的进行四舍五入处理用法如下: DecimalFormat df=new DecimalFormat(pattern): String nums=df.format(value): 这里给pattern:".00" value:100*1.005 nums值为:100.50

float及double类型减法运算时精度丢失问题

当float和double类型在进行减法运算时,会出现精度丢失问题,这种问题主要是由于计算机中普遍使用2进制所造成的.在此做为记录,防止日后遗忘.     public static void main(String[] args) {         float a = 2.1f;         float b = 2.0f;         float c = a - b;         System.out.println("a-b=" + c);     }     //输

关于Java中用Double型运算时精度丢失的问题

注:转自 https://blog.csdn.net/bleach_kids/article/details/49129943 在使用Java,double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1. 特别在实际项目中,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我们又处理其他事情. 这样的情况通过double计算出来的结果去和0比较大小,尤其是有小数点的时候,经常会因为精度丢失而导致程序处理流程出错. BigDecimal在<Eff

NSString 转换 float 的精度问题, 换double类型可以解决

@"0.01" 转换成float时, 经常会变成  0.009999799 这种形式, 因为float类型无法精准保存, 系统会选一个接近的值来代替. 而double类型则可以有更好的精度. http://stackoverflow.com/questions/9328260/converting-nsstring-to-float-adds-in-decimal-places Your issue seems to be that you don't understand how f

java基础之float、double底层运算

目前java遵照IEEE制定的浮点数表示法来进行float,double运算.这种结构是一种科学计数法,用符号.指数和尾数来表示,底数定为2--即把一个浮点数表示为尾数乘以2的指数次方再添上符号. 我们来看一段java代码: public class FloatToBinary { public static void main(String[] args) { float f1=8.5f; System.out.println("f1底层数据(十进制):"+Float.floatTo

类型运算细节

public static void main(String[] args) { byte b = 4; b = 3+7 ;   这个代码在编译时不会报错 byte a = 4; byte c = 5; b =a+c;     这个代码在编译时会报错 System.out.println(b); } 原因分析 : 在程序中只要见到整数默认都是int类型的 byte   b=4;   4是int类型  编译器在运行的时候判断4这个字节是不是在byte的范围内 如果在范围内,就把4做了一次默认的强转

mysql float double 类型

1.float类型 float列类型默认长度查不到结果.必须指定精度. 比方 num float, insert into table (num) values (0.12); select * from table where num=0.12的话.empty set. num float(9,7), insert into table (num) values (0.12); select * from table where num=0.12的话会查到这条记录. mysql> create

float和double类型的存储方式

Float double 类型在计算机的存储方式 计算机中只认识10的二进制数,那么该如何存储小数呢? 那么我们先看Floa类型: Float在计算机(32位)中是4个字节的,具体地:第一位为符号位0为正,1为负 第2到第9位为指数位,第10到32位为尾数位,具体地如下图所示: 1 2 9 10 32 现在我们举个例子: 8.25的二进制表示方法为:1000.01 =1.00001*23 ,指数为3,尾数为00001,那么它怎样在二进制中存储呢? 首先看符号位为正,所以第一位为0,指数为3,要加