繁体   English   中英

58.85显示为58.84999999999

58.85 displays as 58.84999999999

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在用BSP构建一个计算器。 当我用各种数字测试它时,我遇到了十进制数字无法正确显示的问题。

例如。 58.85 - > 58.849999。 但58.84或58.86工作得很好。 58.8471 - > 54.84710000000001。 最后,最后输入的数字将被无处保存。

我的代码如下。

method GENERATE_NUM.

  DATA: lv_digi type I.  * number of digits after the decimal point


  call METHOD me->get_decimal
    RECEIVING
      getdigits = lv_digi.

  *if it is a natural number  
  IF lv_digi = 0.
    IF thisnum < 0.
      result = thisnum * 10 - newdigit.
    ELSE.
      result = thisnum * 10 + newdigit.
    ENDIF.

   *if it is a float number
   Else.
    IF thisnum < 0.
      result = thisnum - ( newdigit / 10 ** lv_digi ).
    ELSE.
      result = thisnum + ( newdigit / 10 ** lv_digi ).
    ENDIF.

    *increase the number of decimal point by 1
    call method me->set_decimal.
  ENDif.

endmethod.

我基本上做的是每次点击一个数字,它都会调用“generate_num”方法。 它需要THISNUM,NEWDIGIT,RESULT作为参数。
thisnum =当前号码(例如:58.8)
newdigit =点击的数字(例如:5)
result =生成的数字(预期:58.85但返回58.849999)。

2 个回复

如果需要具有固定精度的十进制数,则应使用类型P(打包编号)而不是浮点数。

例:

DATA lv_fixed_point TYPE p LENGTH 16 DECIMALS 2.

这将创建一个定点变量,该点后面有两位数。 “length”参数的确切含义不是直截了当的。 文档

打包号码 - 输入P.

P型数据允许小数点后的数字。 小数位数是通用的,并在程序中确定。 P型数据的取值范围取决于其大小和小数点后的位数。 有效大小可以是1到16个字节的任何值。 两个十进制数字打包成一个字节,而最后一个字节包含一个数字和符号。 小数点后最多允许14位数。 初始值为零。 使用P型数据时,最好设置程序属性“固定点算术”。否则,键入P号将被视为整数。

您可以将类型P数据用于诸如距离,权重,金额等值之类的值。

或者你可以调用CALL FUNCTION 'FLOATINGPOINT_COMPARE_ABSOLUTE'来考虑IEEE浮点epsilons。 使用浮点数实际上应该避免直接使用比较,并使用内置epsilons编写自己的比较:

 IS_EQUAL
 IS_GREATER
 IS_GREATER_EQUAL
 IS_LESS
 IS_LESS_EQUAL

是最低限度的。

更多关于浮点的阅读在这里

学习它。 住它。 爱它。

作为一项非平凡的练习,您还可以阅读NaN +Inf-Inf (如果您使用其他DECFLOAT类型而不是f也可以使用sNAN)。

1 如何显示

嗨,我在html中具有以下结构: 如您所见,我正在使用ng-repeat渲染许多race元素。 但是图标是一个引导程序图标,它位于顶级比赛元素的右侧。 我要在中间种族元素旁边显示该图标。 因此,如果有5个元素,它应该在第3个旁边,如果有4个元素,它应该在第2个旁边。 在Ang ...

2 仍然没有显示$

有人可以通过审查为什么visual studio上的标签没有显示货币来帮助我吗? 任何帮助表示赞赏。 ...

2014-02-06 20:56:56 1 25   c#/ label
3 显示

我有一个正则表达式属性,可以根据&lt;/来验证用户输入。 因此,如果用户在输入中输入&lt;/ ,则应显示以下消息:不允许使用以下值( 但是输出显示如下: 我使用了HTML.Decode和HTML.Encode和HTML.Raw,但是结果相同。 ...

4 显示:无; 显示: 不会工作

因此,我有此列表,其中只有列表中的第一项可见。 当我将鼠标悬停在第一项上时,我希望能够看到其他项。 下面是我的代码,但它不起作用。 悬停后,没有任何反应。 这是清单: #manage { float: right; padding: 0px; margin: 0px; ...

2015-11-19 16:35:01 3 682   html/ css
7 OR显示结果,而AND不显示

我有以下问题,一张桌子一样简单 人 : 如果我执行以下T-SQL查询: 它没有显示任何结果...如果我放置一个OR而不是AND,对我来说这是没有意义的,但这可能是正确的,我只是想了解为什么会这样? ...

8 显示/显示内容

我刚刚开始使用Javascript。 我无法弄清楚为什么基本功能不起作用的生活。 当你点击按钮时,我正试图这样做,“世界”消失了。 我真的没有看到为什么这不起作用的逻辑原因; 我基本上是从w3schools介绍的JS教程中复制的。 我认为这是html5中新的“隐藏”的问题,但是 ...

9 未显示的MySQL显示结果

我用下面的查询联接两个表: 现在,如何运行单独的查询以打印出t2中未联接的行? 我尝试将NOT IN用于字段,但收到错误:错误代码:1241。操作数应包含1列 ...

10 即使没有要显示的记录,也显示0

我有这个问题,我似乎无法完美。 任何帮助将不胜感激。 使用SQL Server 2008 R2。 我试图在结果中显示所有社区,即使该社区没有记录。 目前显示以下结果: 正如您所看到的那样,它缺少City4和City7,因为dbo.Donations表中没有这些城市的记录 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM