double s = 0.18 * 10;Console.WriteLine( s.ToString());double p= 4 / 2.0;Console.WriteLine( p); 会的到 如下结果 0.18 * 10 不等于18 这就是精度丢失 精度丢失的原因 系统是基于二进制的 double 64位 双精度 有效数字为53位 而 double--0.18 转为二进制 位数多余53 则多出的位数被丢弃 便出现...
虽然这种表示方法相对较为精确,但对于一些特定的小数,依然可能会出现精度损失。对于无法用有限小数表示的小数,计算机只能进行近似表示,从而导致精度损失。 4.解决方法 针对C语言中double的精度问题,可以采用以下解决方法: 4.1. 使用更高精度的数据类型,比如long double。这种方法能够提高浮点数的表示精度,但对于大部分...
[1]int, float, double之间不得不说的故事,http://www.cnblogs.com/wodehuajianrui/archive/2009/03/18/1415173.html 天行健,君子以自强不息;地势坤,君子以厚德载物。
这次果然得到了意料中的结果:float在转成double的时候出现了精度的丢失问题 a = 0.0001 b = 0.100000001490116 c = 0 如果是在类型转换的时候导致的精度丢失,那我把b改为double应该可以解决这个问题: view source print? 01namespaceFloatTest 02 03classProgram 04 05staticvoidMain(string[] args) 06 07doublea...
你这个说法错了:“按理说double型数据长达8个字节,可以精确到小数点后15位”应该是“double型数据可以保证15位有效数字”。但是其整数部分已经占了8位,所以,最多只能有7位小数是可以保证精度的。
首先,float最多能有7位有效数字,而double则有16位,这句话我想很多像我一样大一的同学们都会看到,但是没能去理解,我们来看下代码 #include<stdio.h> #define num 1234567 int main() { float a1=num; double a2=num; printf("%lf\n%lf\n",a1,a2); ...
用强制转换即可 (double)变量名 字母小写
float 精度为7位有效数字,double 精度为14位有效数字。由于 计算机用 2进制,10进制数据输入后会转化为2进制,输出时又转回来,这种转换会引入误差 (通常说法 “化不尽”)。你可以改double 作比较:double f1,f2; f1=12.34; f2=56.78;printf("\n%f,%f",f1,f2); -- 输出为 12....
我们输入的数值是569.261,实际保存的却是569.260986。因为float只有4个字节表示,精度更低。我们在数值处理的时候,步骤要尽可能简单,越是复杂,问题越多;尽量使用double类型,少用float;对于精度有特殊要求的要注意想其他办法解决。