double精度问题-两个double型变量相乘 在VC中结果不正确

问题描述

两个double型变量相乘 在VC中结果不正确

各位大侠,在VC2010中遇到以下问题,如能解决,必重谢。

两个double型变量相乘,如3.0*0.00095673,应该为0.00287019,但是在VC中这个值是0.002870189999999999,这样的话我们后面有一步需要进行(int)(3.0*0.00095673/0.00095673),真实结果应该为3,但是在VC中这个值却是2,这在我们程序中就会带来一定的计算误差。

现在想知道这样的计算误差能不能通过什么方式处理掉呢?

由于我们在计算过程中有可能会出现(int)(2.999999)=2这样的情况,因此向上取整也可能不是很合适。

解决方案

不能,浮点数本身就有误差。
计算不要用double,用decimal

时间: 2024-08-03 00:52:54

double精度问题-两个double型变量相乘 在VC中结果不正确的相关文章

【新手】布尔型变量的声明用bool和double的区别?

问题描述 [新手]布尔型变量的声明用bool和double的区别? 布尔变量的声明不该是用bool么,看书上用的是double. 我想知道用bool和double声明布尔变量有什么区别?谢谢. 附程序: #include<iostream.h> void main() { double flag; //我用bool flag测试了一下,运行结果是一样的. flag = true; cout<<flag<<endl; } 解决方案 这个看你对C++和C语言的理解,其实语言

系统-C#特殊的两个double类型变量相加问题

问题描述 C#特殊的两个double类型变量相加问题 今天在两个double型变量求和时发现一个很奇怪的问题.问题如下: 0.35+0.32=0.66999999999999993 系统环境:32位XP 开发环境:vs2010 调试时用 "即时窗口"运算也会出现这个问题. 类似的还有 0.35+0.31=0.65999999999999992 0.25+0.21=0.45999999999999996 想明白其中的原理,或者这是个编译器的bug?望大神指教 解决方案 Decimal h

Java中,double类型的两个小数相减,值不正确

问题描述 Java中,double类型的两个小数相减,值不正确 double num1 = 0.03; double num2 = 0.02; double num; num = num1 - num2; 此时得到的num!= 0.01,而是等于0.0099....998:请问这是为什么啊?这是由于double类型的精度造成的嘛?谢谢. 解决方案 浮点数存储肯定有精度误差,特别是小数点后面,可以用BigDecemal这个类做

c++-两个double数相加除2小数部分竟然被截断?

问题描述 两个double数相加除2小数部分竟然被截断? 解决方案 输出为 100001 解决方案二: (double)((a+b)/2)这样呢 解决方案三: 所以还是标准IO好使.. 解决方案四: 2.0前面也加个double,然后最后结果前面也加个double 解决方案五: double a = 100000.0; double b = 100001.0; double c = ((a+b)*1.0)/2.0;这么写 解决方案六: 加上#include 这个头文件,然后在输出那改成这样:co

如何将double变为带两位小数的字符串?

问题描述 比如说这个数为123.5,变为123.50,123变为123.00怎样转,多谢了! 解决方案 解决方案二:用format函数试试解决方案三:floatf1=123.50;floatf2=123.00;strings1=string.Format("{0:.00}",f1);strings2=string.Format("{0:.00}",f2);解决方案四:string.Format()可以ToString()也可以doubled=123;Text=d.T

《Python数据分析》一2.10 用布尔型变量索引NumPy数组

2.10 用布尔型变量索引NumPy数组 布尔型索引是指根据布尔型数组来索引元素的方法,属于花式索引系列.因为布尔型索引是花式索引的一个分类,所以它们的使用方法基本相同. 下面用代码(详见本书代码包中的boolean_indexing.py文件)具体演示其使用方法: import scipy.misc import matplotlib.pyplot as plt import numpy as np lena = scipy.misc.lena() def get_indices(size):

一个int型变量占用4字节,那他的二进制地址是多长?

问题描述 一个int型变量占用4字节,那他的二进制地址是多长? 一个存储单元的地址不是16位吗?我弄不懂啊----求指教指教 解决方案 比如说,你定义了一个变量a,int a;那么内存中会为你分配4个字节大小的空间来存放a,int变量占用4个字节指的就是存放这个变量的值的内存空间大小为4个字节. 而二进制地址的话指的是内存中会为a存一份指针,当你要使用a的时候,就会通过这个指针去找内存中a的值,假如把a比作房间的话,那么指针就是门牌号.而这个指针(其实里面存放的就是二进制地址)的长度的话是不定的

C语言中交换int型变量的值及转换为字符数组的方法_C 语言

不使用其他变量交换两个整型的值: #include <stdio.h> void main(){ int a = 3; int b = 4; a = a ^ b;//使用异或交换 b = b ^ a; a = a ^ b; printf("%d, %d\n", a, b); a = a - b;//使用加减交换 b = a + b; a = b - a; printf("%d, %d\n", a, b); a ^= b ^= a ^= b; printf

[叩响C#之门]第2章 变量 2.2 实数型变量

2.2 实数型变量 当然,除了整数以外,我们还会用到带小数的实数,实数也称为浮点数......