【发布时间】:2017-12-24 10:46:53
【问题描述】:
StrToFloat 使用格式设置的DecimalSeparator。
似乎Val 只接受包含. 作为小数分隔符的字符串。
从_ValExt(Val 调用)中的 ASM 代码看来,它没有使用 DecimalSeparator。
我可以安全地相信Val 接受以. 作为小数分隔符的实数字符串这一事实吗?
【问题讨论】:
-
Delphi 的哪个版本? Val 是古老的,没有类型安全,需要手动错误检查......为什么不直接使用
StrToFloat的两个参数重载并定义您需要的任何格式?这就是它的用途,而且它的可读性和可维护性都大大提高。 -
@J...,在 2009 年 5 月 7 日测试。我也需要它在 D5 中工作。
-
对于没有两个参数重载的旧版本,我可能仍然更喜欢写类似的东西。除非这是性能瓶颈并且
Val提供了关键优化,否则我个人会避免它,至少对于生产代码而言。 -
@J...,我需要存储一个旧的
DecimalSeparator;将DecimalSeparator设置为'.';致电StrToFloat并恢复DecimalSeparator。不是很好的 IMO,也不是线程安全的。就我而言,我知道输入字符串始终包含“。”作为分隔符。 -
@David Heffernan,为什么是 Delphi-5 标签?
Val不是对所有版本都一样吗?事实上,像TFormatSettings这样的更好的选择并没有改变我提出的问题:Does the Val procedure use DecimalSeparator?