c++builder - 如何在 C++ Builder 中为浮点数设置 DecimalSeparator
问题描述
我正在使用 C++ Builder 并且我的语言环境是欧洲的,所以我有一个逗号作为小数分隔符。
我需要使用 DOT 作为分隔符将双精度值转换为小数点值。
我在任何地方都找不到答案。
解决方案
DecimalSeparator
是一个全局变量,只需在格式化之前将其设置为所需的字符double
,例如:
#include <SysUtils.hpp>
System::String FormatWithDot(double value)
{
System::Char old = Sysutils::DecimalSeparator;
Sysutils::DecimalSeparator = _D('.');
System::String s = Sysutils::FloatToStr(value);
Sysutils::DecimalSeparator = old;
return s;
}
System::String s = FormatWithDot(123.45);
或者,如果您需要在多个线程中执行此操作,请使用线程安全版本,TFormatSettings::DecimalSeparator
:
#include <SysUtils.hpp>
System::String FormatWithDot(double value)
{
Sysutils::TFormatSettings fmt = Sysutils::TFormatSettings::Create();
fmt.DecimalSeparator = _D('.');
return Sysutils::FloatToStr(value, fmt);
}
System::String s = FormatWithDot(123.45);
请注意,DecimalSeparator
仅适用于基于 Delphi 的 RTL 函数,如FloatToStr()
,Format()
等。它不适用于基于 C++ 的函数,如std::(s)printf()
, std::to_string()
,std::ostream::operator<<
等。对于那些,您需要使用 C++ 语言环境。
推荐阅读
- c++ - 地图(long long int,long long int)不适用于 key=1000 000 000(在 long long int 范围内)
- c# - 如何验证测试中没有与依赖项的交互
- typescript - 字典函数的正确返回类型
- handlebars.js - 车把代替 Sightly HTL
- php - 使用 Laravel 多次调整图像大小
- vespa - 关于使用空间词组语义规则的问题
- javascript - 如何缩短这个三元运算符?
- symfony4 - Symfony4:使用 URL 动态连接到数据库
- node.js - 了解编写 Node.js 原生插件的工具
- go - 如何将字符串转换为 JSON obj?