`

[转]计算器输入的数字有时显示不对

 
阅读更多

自己做了个简单的计算器,很奇怪,大部分时候输入是正确的,但是有的时候输入就不对,比如我输入1.89就会显示1.8900000000000001,但是我输入1.86就显示很正常,不知道是怎么回事,是数据类型定义的不对吗?拜托大家帮我看下~非常感谢~(计算器8-16VS9-cs4.fla  是CS4文件   计算器8-16VS9.fla是cs5
 
 
 
 
 
1.8900000000000001
一般是浮点数精度问题造成的。
这个无法难以解决。

缓解的办法略提一下
设原始数字是og,
首先将其分为符号a、整数b和小数c以方便处理,此处只分两段或者不分段也可,分成三段比较清晰。
var a:Number = og>=0?1:-1;
og = Math.abs(og);
var b:Number = Math.floor(og);
var c:Number = og-b;
将c放大若干倍后四舍五入,作用是舍弃后面部分的小数。
c = Math.round(c*1000000)/1000000;//保留6位小数
还原og
og = a*(b+c);
注意!og仍然能是不准的数字!双精度浮点数最多精到15~16位,而b+c的有效数字位数有可能达到或超过16位

上述我们做的意义在于可以用字符串显示正确的数字。实际参与运算的其实还是og
var 显示:String;
a>=0?显示="":显示="-";
显示+=b.toString();
if(c>=1){
c-=1; b+=1;//避免c是0.9999999999被舍入为1的情况。
}
显示+=c.toString().subString(1);//去掉0
 
 
 
 
 
 
回复 2# General_Clarke 
不是吧……就算是精度……为什么1.8900000000000001
后面会多个1呢?
o(>﹏<)o
 
 
 
 
 
确定是精度问题。
后面的1是因为浮点数运算不准造成的。
与计算机硬件有关。
 
 
 
 
 
很早之前,用C++做过类似的计算器,但是没有问题的啊~~~是因为数据定义为Number造成的?
 
 
 
 
 
 
即使是C++的计算器也有同样的问题。
lz使用C++反复算几次小数加减乘除法,同样可能出现0.999999999999999或者1.000000000001
不过C++的cout没有记错的话对小数是自动舍入,只保留6位,
可能因此虽然出现上述问题但看不出来
这是计算机硬件结构造成的。
分享到:
评论

相关推荐

    LED显示代码计算器.rar_LED_LED显示

    标题中的“LED显示代码计算器.rar_LED_LED显示”表明这是一个与LED显示屏编程相关的资源包,主要包含了一个名为“LED显示代码计算器”的应用程序,用于帮助用户计算LED显示所需的编码。LED显示通常涉及到数字、字母...

    C# TextBox中只允许输入数字的解决方法

    然而,有时我们希望限制用户只能输入数字,例如在创建一个简单的计算器或数据录入界面时。下面将详细介绍如何实现C# TextBox控件只允许输入数字的功能。 首先,我们可以使用TextBox的`TextChanged`事件来实时监控...

    java带有键盘响应的windows计算器

    在这个计算器项目中,我们需要创建一个JFrame作为主窗口,然后在窗口内添加JButton表示数字和运算符,以及JLabel或JTextField来显示计算结果。 键盘响应功能的实现则需要用到KeyListener接口。我们需为需要监听键盘...

    stm32简易计算器

    用户可以通过轻触屏幕上的虚拟按键来输入数字和操作计算器。触屏技术涉及到LCD驱动、触控IC和触摸控制器的集成,以及相应的驱动程序开发。 3. **GUI开发**:计算器的用户界面需要一个图形用户界面(GUI)。在STM32...

    安卓计算器UI界面

    XML布局文件允许开发者以声明式的方式定义视图控件,如Button(用于代表数字和运算符)、EditText(用于显示输入和结果)等。 1. **布局设计**:在安卓中,常见的布局有LinearLayout(线性布局)、RelativeLayout...

    vb 虚拟键盘源码用于输入数字等信息

    在信息技术领域,有时我们需要开发应用程序,其中包含对用户输入的特定控制,例如仅允许用户输入数字。在这种情况下,VB(Visual Basic)虚拟键盘源码就显得非常实用。它允许程序员创建一个自定义的键盘界面,用户...

    51单片机 计算器

    用户通过按键输入数字和选择运算符,单片机接收到输入后进行解析,并执行相应的运算。运算逻辑可能包括加法、减法、乘法、除法等基本运算,有时还会包含取余、平方等高级功能。计算器的硬件设计通常包括单片机、LCD...

    js网页版手机计算器

    在网页开发中,有时我们需要创建具有特定功能的交互式元素,例如手机计算器。这个“js网页版手机计算器”项目就是这样一个示例,它使用JavaScript语言来模拟真实的手机计算器的界面和功能,为用户提供一个在网页上...

    诺基亚NOKIA万能密码计算器

    IMEI是每一部手机独一无二的15位数字,通常可以通过两种方式获取:在手机上拨打电话*#06#,屏幕会显示该号码;或者查看手机背部的标签,IMEI通常印在电池仓内部。这个15位的IMEI是诺基亚万能密码计算器所需的关键...

    四环五环色环电阻计算器

    这款软件可能包含以下功能:输入颜色代码自动解析、显示电阻值、提供误差范围、显示温度系数等,甚至可能有帮助记忆色环对应数字的训练模式。 在电子维修工作中,色环电阻计算器可以迅速解决识别问题,避免了手动...

    简易的计算器(小型)

    6. **程序结构与模块化**:将计算器拆分为不同的功能模块,如数字输入模块、运算符处理模块和结果显示模块,有助于代码的组织和维护。 7. **代码调试**:在开发过程中,调试是必不可少的。开发者需要学会使用调试...

    七年级上册数学计算器的使用PPT教案.pptx

    使用时需先开启电源(ON键),然后输入数值,利用数字键输入数字,小数点键输入小数,负号键表示负数。 2. 常用按键功能: - ON/OFF键:开关机功能。 - 数字键:输入数字。 - 小数点键:输入小数部分。 - 分数...

    科学计算器(VB源码)

    1. **用户界面设计**:VB提供了Form控件来构建图形用户界面,如TextBox用于显示计算结果,Button控件用作数字和运算符按钮。设计良好的界面应该直观、易于使用,并支持不同大小的屏幕。 2. **事件处理**:每个按钮...

    Web控件 计算器

    Web计算器控件通常由一系列按钮和显示屏幕组成,包括数字键(0-9)、运算符键(加、减、乘、除)、清除键、等于键等。这些控件通过HTML、CSS和JavaScript等技术实现,有时也会利用AJAX来提供异步更新,提升用户体验...

    卡西欧Casio fx-82es计算器PC模拟器casio_fx-82es_zip.rar

    1. **操作界面**:模拟器通常会有类似真实计算器的键盘布局,用户可以通过鼠标或键盘输入数字和操作符。熟悉每个键的功能是使用模拟器的基础,例如,`M+`用于存储当前值,`MR`用于读取存储值,`MC`清除存储内容。 2...

    分子量计算器 6.6.0

    + 增加一个独立运行的分子式格式化工具,可以将剪贴板中的文字按一般分子式的要求将数字变成上下标 * 用户指定某种同位素时,可以不指定质量数,程序将根据“使用原子量”选项选用最高丰度的同位素的精确质量或者...

    025、点阵式LED“0-9”数字显示技术.zip

    2. **8段数码管**:为了提高显示效果和可读性,有时会采用8段数码管,增加了一段,通常是用来增强某些数字(如0和6)的中间部分,使得显示更加立体和清晰。 3. **驱动电路**:控制点阵式LED显示的关键在于驱动电路...

    简单计算器设计(接口技术)

    - **显示问题**:0有时不会显示。可以通过调整显示逻辑,确保所有有效位都能正确显示出来。 #### 6. 实验结论 该实验成功地实现了一个基础计算器的设计与实现,不仅加深了学生对于接口技术的理解,还锻炼了他们将...

    诺基亚nokia手机超级密码计算器

    IMEI通常由15位数字组成,对于诺基亚手机,有时可以通过IMEI生成一个特定的解锁密码。这个“超级密码”可以覆盖或重置原始的手机安全密码,使用户能够重新获得对手机的访问权限。 "诺基亚超级密码修改器.exe"很可能...

    iOS计算器.zip

    它采用了清晰的字体和颜色,以及触摸友好的按钮布局,确保用户能够轻松输入数字和运算符。 2. **事件处理**:iOS计算器通过响应用户的触摸事件来执行相应的计算。当用户点击按钮时,应用会捕获这个事件,解析点击的...

Global site tag (gtag.js) - Google Analytics