【问题标题】:Decimal separator in C++C++ 中的小数分隔符
【发布时间】:2016-03-01 13:44:50
【问题描述】:

我遇到了以下问题,希望有人可以帮助我。我想使用一个无法访问源代码的库。 (仅 *.h)在此库中的某个函数中读取一个 ASCII 文件。

  • 如果我在一个普通的 main.cpp 中使用这个函数,一切正常。

Output: Test [-0.06 0.08 -0.02]*

  • 如果我在我的大项目(许多外部库)中链接库并调用函数

Output: Test [-0 0 -0]

我认为在我的大项目中更改了小数分隔符。

如果我无法访问库的源代码,有什么办法解决这个问题吗?

我在 Linux Ubuntu 机器上使用 g++4.8.1 使用 C++ 编程。是一个老同事的库(已经联系过他的源码但不知道他是否还有src),我只有静态库文件*.a和*h文件。

示例代码:

Mesh* vMesh = MeshLoader::load(file);
Vec3* toPrint  = vMesh->getVertex(4);
std::cout<<"Output: Test:"<<std::endl;
toPrint->print();

但这段代码实际上什么也没说,因为我无法访问函数 *.cpp 代码

【问题讨论】:

  • 我们需要比这更多的细节。什么是图书馆?完全隐藏/专有?你的调用代码呢,看起来怎么样?你知道这个库是用什么语言编写的吗?它是如何打印的?我现在能做的最好的就是把你指向numpunct
  • 什么操作系统?如果库使用 Windows API 及其转换函数,则用户的区域设置指定小数分隔符。在解析用户输入时,这是一件好事。解析文本数据时,不是那么多。图书馆很可能有一种指定语言环境的方法。否则,您将不得不更改进程的语言环境。这同样适用于其他操作系统

标签: c++ decimalformat decimal-point


【解决方案1】:

因为我看不到源代码,所以我不得不猜测 lib 中使用的语言环境,然后再切换回我的旧语言环境。不好看但是..

std::setlocale(LC_NUMERIC, "en_US"); //<-- guessed
...
std::setlocale(LC_NUMERIC, "de_DE"); //<-- my standard

谢谢@numpunct 和@Panagiotis Kanavos

【讨论】:

    猜你喜欢
    • 2011-04-21
    • 2011-06-10
    • 1970-01-01
    • 2016-03-22
    • 2016-12-08
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多