如何在 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 上正确获取小数分隔符的主要内容,如果未能解决你的问题,请参考以下文章

如何检测用户的语言环境以获取正确的 csv 分隔符?

Wpf TextBox上的键盘小数分隔符,如何?

Android - 逗号作为数字键盘上的小数分隔符

如何在 Octave 中获取环境小数点分隔符

使用浏览器,我如何知道操作系统使用哪个小数分隔符?

如何获取 toLocaleString() 方法的小数和千位分隔符?