关于double类型数字相加位数发生变化的问题

??

因为计算机内部存贮本身的缺陷,导致double类型的数字相加。得到的结果有非常多位,比方

774.23 750.0 2638.66 4162.889999999999

看到这个是不是非常晕

当然也有解决方式

new BigDecimal(Double.toString(a)).add( new BigDecimal(Double.toString(b))).add( new BigDecimal(Double.toString(c)))

用BigDecimal和add。问题迎刃而解

774.23 750.0 2638.66 4162.89

哈哈

时间: 2024-10-11 17:19:05

关于double类型数字相加位数发生变化的问题的相关文章

Average-计算文件中double类型数字的平均数

Average-计算文件中double类型数字的平均数: //Average-计算文件中double类型数字的平均数 #include<iostream> #include<fstream> #include<cstdlib> int main() { using namespace std; ifstream fin; ofstream fout; double tem,sum,aver; int count = 0; fin.open("numbers.d

c++中double类型控制小数位数

有时,我们需要输出确定小数位数的double,可以先引入如下头文件: #include <iomanip> 然后通过下列方式输出: double zzz = 8.66666; cout << fixed << setprecision(2) << zzz << endl; 或者: if ((aid % (int(allTime / deltaT) / files)) == 0) { cout << fixed << set

JAVA中double类型数据相加

public class DoublePlusDouble {     public static double add(double v1, double v2) {         BigDecimal b1 = new BigDecimal(Double.toString(v1));         BigDecimal b2 = new BigDecimal(Double.toString(v2));         return b1.add(b2).doubleValue();   

java double类型的保留位数总结

在mysql查询的时候利用mysql的函数进行处理,如:format,CAST(t.matching_money as decimal(38, 0)) matching_money,rund 等处理: jsp里用自定义f标签显示:

C++ double类型转string类型后,怎么实现小数点后只显示一个数字

C++ double类型转string类型后,怎么实现小数点后只显示一个数字 #include <iostream> #include <sstream> #include <iomanip> ?? template <class T> std::string fmt(T in, int width = 0, int prec = 0) { ????std::ostringstream s; ????s << std::setw(width) &

java中数字加减乘除乱象(尤其是double类型)

 做一个300 / 1570 的算数题,结果为0 是不是有点大跌眼镜 那怎么解决呢 转成Double类型,再除就没问题了 import java.math.BigDecimal; public class Arith { private static final int DEF_DIV_SCALE = 10; /** * * 两个Double数相加 * * * @param v1 * * @param v2 * * @return Double */ public static Double

java中如何使用BigDecimal使得Double类型保留两位有效数字

一.场景:从数据表中读出Decimal类型的数据直接塞给Double类型的对象时,并不会有什么异常. 如果要再此基础上计算,就会发生异常. 比如:读出数据为0.0092,将其乘以100,则变成了0.919999999999999... 二.原因: java mysql 数据类型对照如下: 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N CHAR

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

LeetCode OJ:Add Digits(数字相加)

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. For example: Given num = 38, the process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one digit, return it. Follow up: Could you do it without an