【问题标题】:How many places behind the comma does one need to get correct rouding逗号后面需要多少位才能正确舍入
【发布时间】:2017-07-27 16:52:29
【问题描述】:

假设您想为售价 60 欧元的产品提供 5 欧元的折扣。

这等于折扣 0.08333... 或 8.333... %

当向后计算时,我会计算:

  • round(60 * 0.083333, 2) = 5,00
  • round(60 * 0.08333, 2) = 5,00
  • round(60 * 0.0833, 2) = 5,00
  • round(60 * 0.083, 2) = 4,98

问:逗号后面需要多少位才能获得准确的数字(对于货币交易),在任何基础价格上具有任何折扣?

或者实际上,在 MySQL 表中存储折扣时,我的 decimal(x,y) 类型参数应该是什么?

【问题讨论】:

    标签: mysql math rounding


    【解决方案1】:

    您需要累积误差小于 1/2 美分或 0.005。中间结果的相对准确性需要反映这一点。如果计算中包含的价格都低于10^k = 10^(k+2) 美分,这需要0.5*10^(-k-2) 或所有中间数字中至少k+3 有效数字的相对准确度。

    请注意,误差在计算的每一步中都会累积,以一阶相加,因此当计算有多个步骤时,计算的相对精度需要分别向下调整。 s 步骤的有效位数增加 log10(s)

    在您的示例中,k=22 步骤具有四舍五入的结果,因此中间结果应至少具有 5 有效数字以确保获得正确的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      相关资源
      最近更新 更多