Если все, что вы хотите сделать, это обрезать дробные цифры в конце строки, вы можете использовать один из форматов по умолчанию (например, LOCALE_NAME_USER_DEFAULT
), а затем проверить наличие дробного разделителя (запятая в континентальные языки, укажите на английском) в результирующей строке символов, а затем отрежьте дробную часть, заменив ее нулевым байтом:
#define cut_off_decimals(sz, cch) \
if (cch >= 5 && (sz[cch-4] == _T('.') || sz[cch-4] == _T(','))) \
sz[cch-4] = _T('\0');
(Венгерское предупреждение: sz
- это строка C, cch
- количество символов, включая завершающий нулевой байт. И _T
- это общий текстовый макрос Windows для char
или wchar_t
в зависимости от того, UNICODE
определен, необходим только для совместимости с Windows 9x / ME.)
Обратите внимание, что это приведет к неверным результатам для очень странного случая пользовательского формата, где символ от третьего до последнего является точкой или запятой, которая имеет какое-то особое значение для другого пользователя чем дробный сепаратор . Я никогда не видел такой числовой формат за всю свою жизнь, и поэтому я пришел к выводу, что это хорошо и достаточно безопасно.
И, конечно, это ничего не изменит, если символ от третьего до последнего не является ни точкой, ни запятой.