Make String::Number locale-independent

This commit is contained in:
Lynix 2019-12-25 16:26:53 +01:00
parent 0bfe1679c1
commit a69d7a2e89
2 changed files with 8 additions and 4 deletions

View File

@ -15,6 +15,7 @@
#include <cstdio> #include <cstdio>
#include <cstring> #include <cstring>
#include <limits> #include <limits>
#include <locale>
#include <sstream> #include <sstream>
#include <Utfcpp/utf8.h> #include <Utfcpp/utf8.h>
#include <Nazara/Core/Debug.hpp> #include <Nazara/Core/Debug.hpp>
@ -5121,6 +5122,7 @@ namespace Nz
String String::Number(float number) String String::Number(float number)
{ {
std::ostringstream oss; std::ostringstream oss;
oss.imbue(std::locale::classic());
oss.precision(NAZARA_CORE_DECIMAL_DIGITS); oss.precision(NAZARA_CORE_DECIMAL_DIGITS);
oss << number; oss << number;
@ -5137,6 +5139,7 @@ namespace Nz
String String::Number(double number) String String::Number(double number)
{ {
std::ostringstream oss; std::ostringstream oss;
oss.imbue(std::locale::classic());
oss.precision(NAZARA_CORE_DECIMAL_DIGITS); oss.precision(NAZARA_CORE_DECIMAL_DIGITS);
oss << number; oss << number;
@ -5153,6 +5156,7 @@ namespace Nz
String String::Number(long double number) String String::Number(long double number)
{ {
std::ostringstream oss; std::ostringstream oss;
oss.imbue(std::locale::classic());
oss.precision(NAZARA_CORE_DECIMAL_DIGITS); oss.precision(NAZARA_CORE_DECIMAL_DIGITS);
oss << number; oss << number;

View File

@ -233,19 +233,19 @@ namespace Nz
break; break;
case ShaderAst::ExpressionType::Float1: case ShaderAst::ExpressionType::Float1:
Append(String::Format("%F", node.values.vec1)); Append(String::Number(node.values.vec1));
break; break;
case ShaderAst::ExpressionType::Float2: case ShaderAst::ExpressionType::Float2:
Append(String::Format("vec2(%F, %F)", node.values.vec2.x, node.values.vec2.y)); Append("vec2(" + String::Number(node.values.vec2.x) + ", " + String::Number(node.values.vec2.y) + ")");
break; break;
case ShaderAst::ExpressionType::Float3: case ShaderAst::ExpressionType::Float3:
Append(String::Format("vec3(%F, %F, %F)", node.values.vec3.x, node.values.vec3.y, node.values.vec3.z)); Append("vec3(" + String::Number(node.values.vec3.x) + ", " + String::Number(node.values.vec3.y) + ", " + String::Number(node.values.vec3.z) + ")");
break; break;
case ShaderAst::ExpressionType::Float4: case ShaderAst::ExpressionType::Float4:
Append(String::Format("vec4(%F, %F, %F, %F)", node.values.vec4.x, node.values.vec4.y, node.values.vec4.z, node.values.vec4.w)); Append("vec4(" + String::Number(node.values.vec4.x) + ", " + String::Number(node.values.vec4.y) + ", " + String::Number(node.values.vec4.z) + ", " + String::Number(node.values.vec4.z) + ")");
break; break;
default: default: