首页 > 解决方案 > 如何在 C++ Builder 中为浮点数设置 DecimalSeparator

问题描述

我正在使用 C++ Builder 并且我的语言环境是欧洲的,所以我有一个逗号作为小数分隔符。

我需要使用 DOT 作为分隔符将双精度值转换为小数点值。

我在任何地方都找不到答案。

标签: c++builder

解决方案


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++ 语言环境。


推荐阅读