4 delphi math type-conversion delphi-xe
我有一个图表用于显示石头和磅(磅)的重量.
图表由记录中的数据填充,对于权重,数据类型为Double.
记录数据在运行时编辑,我需要知道一种正确格式化输入数据的方法.
为了更好地理解,首先看一下这些样本值,它们表示为Stones和lbs:
石头中只有14磅,所以输入的任何值都超过.13应该将石头值增加1并且从.00开始降低磅值 - 所以考虑到这一点,从上面的样本中得出两个值不正确:
他们应该是:
是否有内置的数学函数可以正确地格式化/圆形石块和磅?
如果不是,我真的很想看到一个答案,显示解决这个问题的方法的逻辑或方法.
我考虑检查磅部分,如果值> 0.13然后我增加石头,但然后我不知道如何最好这样做,特别是,如果值可能是像13.76那么我不知道该改变什么石头和磅进(这是我开始迷惑自己的地方).
提前致谢.
对于磅,你得到小数部分,Frac(weight)然后乘以100.然后使用Round以整数形式得到它:
pounds := Round(100*Frac(weight));
Run Code Online (Sandbox Code Playgroud)
对于宝石而言,它只是Trunc:
stones := Trunc(weight);
Run Code Online (Sandbox Code Playgroud)
在另一个方向你做:
weight := stones + pounds/100.0;
Run Code Online (Sandbox Code Playgroud)
有了这些功能,您可以轻松完成剩下的工作.磅值大于14的有效性检查很容易处理.例如:
stones := Trunc(weight);
pounds := Round(100*Frac(weight));
stones := stones + pounds div 14;
pounds := pounds mod 14;
Run Code Online (Sandbox Code Playgroud)
如果您在通用库中的任何地方找到此代码,我会感到非常惊讶.那是因为它是一种非常差的储存重量的方法.如果您打算使用浮点格式,您应该这样做:
weight := stones + pounds/14.0;
Run Code Online (Sandbox Code Playgroud)
在另一个方向,你会这样做:
stones := Trunc(weight);
pounds := Round(14*Frac(weight));
stones := stones + pounds div 14;
pounds := pounds mod 14;
Run Code Online (Sandbox Code Playgroud)
不幸的是你仍然需要做div/mod shuffle.想象一下weight=9.99,例如,当发生什么时.
这样做可以使浮点值的算术更加合理.例如,假设您已经测量了10个人的权重,并想知道总数.使用真正的浮点表示来实现它是有意义的,但不能用你的表示.
要看到这一点,假设这10个人,他们都是零石头,10磅.我认识的人很小.但你会称之为0.1.加10批,你的重量为1.0.但很明显,实际值是100磅,或7石两磅.
但如果你服用10磅并喂它:
weight := stones + pounds/14.0;
Run Code Online (Sandbox Code Playgroud)
然后你会发现重量值为10/14.添加10个,以获得100/14,好吧,我相信你会得到我的漂移!
存储此类数据的另一种显而易见的方法是磅.整数或浮点都有意义.
| 归档时间: |
|
| 查看次数: |
1670 次 |
| 最近记录: |