我想知道如何将整数值转换为浮点值,而不给中间变量赋值。代码如下:
Format('Theoretical peak scaling %6.2f', [ThreadCount])
这显然在运行时失败,因为ThreadCount
是整数。
我试过了显而易见的办法
Format('Theoretical peak scaling %6.2f', [Double(ThreadCount)])
而编译器会使用
E2089 Invalid typecast
我知道我能写
Format('Theoretical peak scaling %6.2f', [ThreadCount*1.0])
但是这样读起来很糟糕,并且只会诱使将来的维护人员删 debugging 误的乘法。
有没有人知道一个干净的方法来做到这一点,没有一个中间变量,并在方式,使代码的意图清楚地为未来的读者?
6条答案
按热度按时间2g32fytz1#
这可能有点傻......但如果它是一个整数,为什么不直接:
小数点后面除了零什么都不会有,对吧?
ki1q1bka2#
对于内部类型,您可以选择使用
record helper
:这是在XE3中添加的,但有一些来自Embarcadero的限制。由于只能有一个助手在范围内,Emarcadero建议这个特性只供他们在RTL中使用。
引用Marco Cantu的话:
参考:
On Record/Class/Type Helpers
。**更新:**在
XE4
中,整数的内置helper类TIntegerHelper
有一个方法ToDouble
。使用
RTTI
,它可以通过内置的语言元素像这样解决:仅FTR,一项基准测试显示
Double(Variant(i))
和内联助手i.AsFloat
相当,而TValue.From<Integer>(i).AsExtended
慢200多倍。6ie5vjzr3#
这是学术性的,我会使用一个函数或 * 1.0,但这是可行的
iyfjxgzm4#
你就不能用一个简单的函数:
ecfsfe2w5#
你也可以这样做:
Integer ThreadCount永远不会有小数部分,所以将小数部分的零放在字符串中并将数据作为整数来处理也同样准确。〉
drkbr07n6#
您可以使用整数类型提供的
ToExtended
函数