关于DOUBULE类型相乘的奇怪问题,很是告不明白

问题描述

我今天作了个代码,是计算路费的,如果算出结果代小数点的我就用MATH.FLOOR()给小数点去掉小数点以后的都不要了。但是我今天TEST的时候发现了个问题。如:doublea=3000;doubleb=0.29;doublec=a*b;我用调试模式时发现.在即时窗口我输入?a*b869.99999999999989a*b869.99999999999989?c.ToString()"870"的出的结果却是这个样子我不明白为什么会出现这个情况,请告诉给我解答一下正常情况我用计算器算3000*0.29=870;但是这里面却是869.99999999999989;

解决方案

解决方案二:
浮点数总会有一点微小的误差,LZ有兴趣可以学习一下IEEE754试试Math.Floor(Math.Round(c,2)),不知道行不行,期待楼下的高手
解决方案三:
有没有人告诉我啊
解决方案四:
關注
解决方案五:
告诉我啊老大们
解决方案六:
因为浮点数是没有0这个概念的,所有的数都是有精度的。这也就是为什么你一乘会出现869.99999999999989的奇怪数字的原因,因为所有的数字都有一个精度问题,所以使用Double型的值一定要限定一个精度.
解决方案七:
是精度问题,电脑的计算方法跟你的不一样的。
解决方案八:
因为很多浮点小数都是不精确的,doubleb=0.29;从这个数储存到计算机中开始,它已经是一个近似数你直接输出下b看看计算机里面只有二进制十进制小数到二进制小数有个转换过程只有2的负幂的和,才是二进制有限小数其他都是无限小数,必然会损失精度的~
解决方案九:
谢谢老大们啊感谢

时间: 2024-11-03 00:17:57

关于DOUBULE类型相乘的奇怪问题,很是告不明白的相关文章

c语言-C语言数据打包程序 从键盘输入一组数据,输出为头+长度+类型+数据+尾;结果很奇怪

问题描述 C语言数据打包程序 从键盘输入一组数据,输出为头+长度+类型+数据+尾:结果很奇怪 typedef struct DataMessage { int file_header; //数据头 int length; // 数据长度 char type; //数据类型 char data[10]; //数据 int file_ending; //数据尾 }Message; main() { char string[100]; Message mes; int i; mes.file_head

两个Long类型相乘溢出怎么解决

问题描述 如题,今天面试,面试官问到一个问题,怎么处理两个Long类型相乘溢出的问题? 解决方案 public static void main(String[] args) throws Exception {long a = Long.MAX_VALUE;long b = Long.MAX_VALUE;BigDecimal ba = new BigDecimal(String.valueOf(a));BigDecimal bb = new BigDecimal(String.valueOf(

说一个界面很奇怪,很诡异时,我们在说什么?

  1.可能是信息的相关性弱 当把相关性弱的信息放在一块时,就会让你产生奇怪和诡异的感觉(无关于对齐和留白); 这里不多说了,设计师一般都有这个敏感度 对比两种信息摆放方式 2.可能是认知模式无法匹配 没有契合用户的认知模型,功能逻辑再正确也是别扭的; 最初美团商家中心的房态管理模块非常奇怪,是用下拉框选择项目,再去选择一个房型,日期控件选择一个日期,最后选择一个有房 or 满房的状态.听我说起来似乎功能合理,但是实际操作多个房型的状态时,在同一个控件区域不停的进行操作,感觉怪不可言,如下图:

向熟悉C#与COM组件互操作的大神们求助!

问题描述 最近正在学习MSActiveAccessibility技术,本意是想做一个类似AccExplorer32这样的工具,在网络上找了一下相关的资料,发现了如下的页面:(MSActiveAccessibility接口技术编程尝试)根据这个教程给出的资料学习了一下,然后尝试以C#来写例子,发现一些问题,想请教一下各位大大:NativeCodeBOOLFindChild(IAccessible*paccParent,LPSTRszName,LPSTRszRole,LPSTRszClass,IAc

包装很好,里面是什么(转自微软)

微软 包装很好,里面是什么? 作者:Eric Gunnerson上个月,我们花了一些时间来学习如何找到与 C# 有关的东西.我收到一些询问,问及有关 C# 或 .NET 的 Web 站点,所以我决定在专栏里增加一个 Web 站点荟萃节目.写信告诉我(ericgu@microsoft.com)您的站点,每个月我会随机选择五个站点,在专栏的最后列出它们的 URL.开场白结束,言归正传. C# 中的类型 C# 和公共语言运行时 (CLR) 中有两种类型:引用类型(在 C# 中用类声明)和值类型(在 C

C语言指针转换为intptr_t类型

1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针这样做呢?如是果断上网查查,发现我的感觉是错误的,所以,任何事情不能凭感觉,要弄清楚来龙去脉.先总结一下intptr_t类型,然后介绍指针与intptr_t类型的转换,最后给出测试程序. 2.intptr_t类型 我接触最早的处理器是32位,目前64位处理器发展迅速.数据类型特别是int相关的类型在

很变态的反射问题。虚心请教

问题描述 我需要反射获取一个类的私有方法..但这个私有方法是有方法重载的..当然,这也不是问题,我们能从外部执行方法参数的个数和类型来获取..但问题来了..这个方法的参数的类型有可能是泛型的..这下怎么办?publicclasstest{privatevoidSave<T>(Tt,stringa){}privatevoidSave<T>(inta){}}publicclassrun{publicvoidSave<T>(Tt){//这样可以获得privatevoidSav

MySQL的列类型

    数据库中的每个表都是由一个或多个列构成的.在用CREATE TABLE 语句创建一个表时,要为每列指定一个类型.列的类型比数据类型更为特殊,它仅仅是如"数"或"串"这样的通用类型.列的类型精确地描述了给定表列可能包含的值的种类,如SMALLINT 或VARCHAR( 3 2 ).    MySQL的列类型是一种手段,通过这种手段可以描述一个表列包含什么类型的值,这又决定了MySQL怎样处理这些值.例如,数值值既可用数值也可用串的列类型来存放,但是根据存放这些

Java的double类型探索.

一.double类型的存储表示 Java的浮点类型表示完全按照IEEE754标准(Standards of IEEE 754 floating point numbers),有兴趣可以上IEEE标准网站(www.ieee.org)查阅.该标准的内容基本上描述了浮点类型的存储格式(Storage Layout),下面我从中总结几段,来概括该标准,详细信息请查阅标准原文. 1.什么是浮点数. 计算机上表达实数有两中方法:定点表示(fixed-point)和浮点表示(floating-point).定