Browse Source

Changed some String methods to avoid using locale-specific characters in decimal conversions, and to stick to a dot in all cases.

tags/2021-05-28
jules 13 years ago
parent
commit
562282c06d
2 changed files with 16 additions and 16 deletions
  1. +4
    -0
      modules/juce_core/juce_core.cpp
  2. +12
    -16
      modules/juce_core/text/juce_String.cpp

+ 4
- 0
modules/juce_core/juce_core.cpp View File

@@ -74,6 +74,10 @@
#include <sys/time.h>
#endif
#if JUCE_MAC || JUCE_IOS
#include <xlocale.h>
#endif
#if JUCE_ANDROID
#include <android/log.h>
#endif


+ 12
- 16
modules/juce_core/text/juce_String.cpp View File

@@ -414,18 +414,6 @@ namespace NumberToStringConverters
return t;
}
char getDecimalPoint()
{
static char dp = (char)
#if JUCE_VC7_OR_EARLIER
std::_USE (std::locale(), std::numpunct <char>).decimal_point();
#else
std::use_facet <std::numpunct <char> > (std::locale()).decimal_point();
#endif
return dp;
}
char* doubleToString (char* buffer, const int numChars, double n, int numDecPlaces, size_t& len) noexcept
{
if (numDecPlaces > 0 && n > -1.0e20 && n < 1.0e20)
@@ -438,7 +426,7 @@ namespace NumberToStringConverters
while (numDecPlaces >= 0 || v > 0)
{
if (numDecPlaces == 0)
*--t = (char) getDecimalPoint();
*--t = '.';
*--t = (char) ('0' + (v % 10));
@@ -454,13 +442,21 @@ namespace NumberToStringConverters
}
else
{
len = (size_t) sprintf (buffer, "%.9g", n);
// Use a locale-free sprintf where possible (not available on linux AFAICT)
#if JUCE_WINDOWS
len = (size_t) _sprintf_l (buffer, "%.9g", nullptr, n);
#elif JUCE_MAC || JUCE_IOS
len = (size_t) sprintf_l (buffer, nullptr, "%.9g", n);
#else
len = (size_t) sprintf (buffer, "%.9g", n);
#endif
return buffer;
}
}
template <typename IntegerType>
const String::CharPointerType createFromInteger (const IntegerType number)
String::CharPointerType createFromInteger (const IntegerType number)
{
char buffer [32];
char* const end = buffer + numElementsInArray (buffer);
@@ -469,7 +465,7 @@ namespace NumberToStringConverters
return StringHolder::createFromFixedLength (start, (size_t) (end - start - 1));
}
const String::CharPointerType createFromDouble (const double number, const int numberOfDecimalPlaces)
String::CharPointerType createFromDouble (const double number, const int numberOfDecimalPlaces)
{
char buffer [48];
size_t len;


Loading…
Cancel
Save