如何在 Android 上正确获取小数分隔符
Posted
技术标签:
【中文标题】如何在 Android 上正确获取小数分隔符【英文标题】:How to Correctly Fetch the Decimal Separator Character on Android 【发布时间】:2015-12-08 12:10:59 【问题描述】:使用这样的旧方法很容易获取字符:
var
FS:TFormatSettings;
begin
FS:=TFormatSettings.Create;
...
记录成员FS.DecimalSeparator
将包含所需的Char
。这种方法在我的 XE5 IDE 编译的 Win FMX 应用程序中运行良好。但是在寻找正确的方式来为 FireMonkey 中的角色提供正确的方法时,我读到了一些意见,认为这种方式是有害的,并且
deprecated。我还读到,更高版本的 Delphi 不支持此功能(我自己无法检查)。但是什么是正确和可靠的方法呢?尤其是如果希望代码能够迁移到 android?
【问题讨论】:
查看 TFormatSettings 代码,我只能看到针对 Windows、MacOS 和 Linux 的平台定义(是的,我对此感到很惊讶,因为您可能对此感到惊讶),但对 Android 却一无所知。所以我不知道这是否完全支持 Android 操作系统。 作为操作系统的 Android 是否会向其应用程序公开此类信息? @SilverWarior 感谢您对我的帖子的关注。是的。我也在挖掘 TFormatSettings 的代码。我有以下问题的背景。我正在编写一个TGrid
后代类,我希望它适合将来将我的主要项目代码迁移到 Android。某些列(单元格)需要输入控制。 Android 将显示一个屏幕键盘,其中包含由语言环境设置的小数分隔符按钮,但用户可以尝试输入该字符 >1 次。而且。字符串转换的浮点数(货币)也需要此数据。
@SilverWarior:如果你再仔细看一下,RTL 实际上有第四个初始化TFormatSettings
的实现——LIBICU 库。在SysUtils
单元的最顶部,为Android 定义了USE_LIBICU
:$IFDEF ANDROID$DEFINE USE_LIBICU$ENDIF
谢谢@RemyLebeau。你曾经帮助人们提供出色的建议!我错过了指令。
【参考方案1】:
DecimalSeparator
全局变量以及所有其他与语言环境相关的全局变量已被弃用。它们现在已被删除。
访问此信息的新的受支持方式是通过TFormatSettings
。因此,与您的问题相反,该类型并未被弃用。恰恰相反,这是获取语言环境信息的推荐方式。
var
fs: TFormatSettings;
....
fs := TFormatSettings.Create;
// use fs.DecimalSeparator;
【讨论】:
小错字:TFormatSettings.Create @Edward 谢谢。我现在已经纠正了这一点。随意自己进行这样的编辑。它进入一个建议编辑的队列,如果被接受(本来会),您将获得代表。 我会的,谢谢大卫。以上是关于如何在 Android 上正确获取小数分隔符的主要内容,如果未能解决你的问题,请参考以下文章