我有一个图表,用于以石头和磅 (lbs) 显示重量。

该图表由记录中的数据填充,权重的数据类型为 Double。

记录数据是在运行时编辑的,我需要知道一种正确格式化输入数据的方法。

为了更好地理解,首先查看这些样本值,它们表示为 Stones 和 lbs:

  • 8.09(8 石头和 9 磅)
  • 12.03(12 块石头和 3 磅)
  • 14.16(14 块石头和 16 磅)
  • 11.13(11 块石头和 13 磅)
  • 17.14(17 石头和 14 磅)

  • 石头中只有 14 磅,因此输入的任何超过 0.13 的值都应将石头值增加 1 并将磅值从 0.00 开始降低 - 因此请记住这一点,从上述示例中的两个值不正确:
  • 14.16
  • 17.14

  • 他们应该是:
  • 15.02
  • 18.00

  • 是否有内置的数学函数可以正确格式化/圆形石头和磅?

    如果不是,我真的很想看到一个答案,显示解决这个问题的逻辑或方法。

    我想检查磅部分,如果值 > 0.13 然后我增加石头,但是我不确定如何最好地做到这一点,特别是如果值可能是 13.76 那么我不知道要改变什么石头和磅(这是我开始混淆自己的地方)。

    提前致谢。

    最佳答案

    对于磅,您使用 Frac(weight) 得到小数部分,然后乘以 100。然后使用 Round 得到整数形式:

    pounds := Round(100*Frac(weight));
    

    对于石头,它只是 Trunc :
    stones := Trunc(weight);
    

    在另一个方向你做:
    weight := stones + pounds/100.0;
    

    有了这些功能,您可以轻松完成剩下的工作。对大于 14 磅值的有效性检查很容易处理。例如:
    stones := Trunc(weight);
    pounds := Round(100*Frac(weight));
    stones := stones + pounds div 14;
    pounds := pounds mod 14;
    

    如果您在通用库中的任何地方发现此代码,我会感到非常惊讶。那是因为这是一种非常糟糕的储存体重的方式。如果您打算使用浮点格式,您应该这样做:
    weight := stones + pounds/14.0;
    

    在另一个方向,你会这样做:
    stones := Trunc(weight);
    pounds := Round(14*Frac(weight));
    stones := stones + pounds div 14;
    pounds := pounds mod 14;
    

    不幸的是,您仍然需要进行 div/mod shuffle。例如,想象一下当 weight=9.99 时会发生什么。

    这样做可以使浮点值的算术更加合理。例如,假设您测量了 10 个人的体重并想知道总数。用真正的浮点表示来做到这一点是有意义的,但不是用你的表示。

    为了看到这一点,假设这 10 个人,他们都称零石头,10 磅。我认识的人很少。但你会称之为0.1。将其中的 10 批相加,您的权重为 1.0。但很明显,实际值(value)是100磅,也就是7石两磅。

    但是如果你吃 10 磅,然后喂它:
    weight := stones + pounds/14.0;
    

    然后您会发现权重值为 10/14。添加 10 批得到 100/14,好吧,我相信你明白我的意思!

    存储此类数据的另一种明显方式是磅。整数或浮点数都有意义。

    关于delphi - 正确格式化石头和磅?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15483676/

    10-13 02:43