我有一个图表,用于以石头和磅 (lbs) 显示重量。
该图表由记录中的数据填充,权重的数据类型为 Double。
记录数据是在运行时编辑的,我需要知道一种正确格式化输入数据的方法。
为了更好地理解,首先查看这些样本值,它们表示为 Stones 和 lbs:
石头中只有 14 磅,因此输入的任何超过 0.13 的值都应将石头值增加 1 并将磅值从 0.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/