不仅是用
setlocale
像这样可能很慢。它是完全线程不安全的,因此在通用/库代码中使用是不安全的。
假设您使用的是POSIX或类似POSIX的系统,您需要的是
newlocale
/
uselocale
locale_t safe_locale = newlocale(LC_NUMERIC_MASK, "C", duplocale(LC_GLOBAL_LOCALE));
然后,无论何时你想使用它:
locale_t old = uselocale(safe_locale);
/* Do stuff with it. */
uselocale(old);
或者,只是不尊重
LC_NUMERIC
在你的申请里。打电话后
setlocale(LC_ALL, "")
setlocale(LC_NUMERIC, "C")
就这样吧。这在库代码中是无效的/不可接受的,但是如果您正在编写库代码,您可以使用punt并让调用者负责执行它认为合适的任何方法(从不遵守)
LC\ U数字
或者使用
/
使用区域设置
'.'
localeconv()->decimal_point
指向字符串
"."