atof, strtod и локаль.
Внезапно: а вот как положено в коде на С конвертить строку в double, если мы точно знаем, что в строке десятичный разделитель ".", и точно знаем, что код будут запускать на системе с адовыми локалями, у которых разделитель "," типа русской, белорусской итд?
В дотнете, как положено, есть функция с параметром для локали и инвариантная локаль InvariantCulture.
А в олдскульно-кошерном C как?
setlocale(LC_NUMERIC,"C"); чо-то не рекомендуют, говорят, не thread-safe.
no subject
no subject
(no subject)
(no subject)
no subject
no subject
(no subject)
(no subject)
(no subject)
no subject
(Anonymous) 2012-01-22 07:46 pm (UTC)(link)--
xaep
no subject
no subject
no subject
(no subject)
no subject
все работает, как положено, выдает 1.2 и 1,2
(no subject)
no subject
(Anonymous) 2012-01-22 08:31 pm (UTC)(link)--
xaep
no subject
no subject
(no subject)
no subject
2) Мнение, что разделителем можэт быть запятая -- это ересь, посему setlocale(LC_NUMERIC, "C")
3) char *dot;
if ((dot = strchr(s, '.'))) {
*dot = *nl_langinfo(RADIXCHAR);
}
no subject
Расскажите.
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
no subject
no subject
no subject
no subject
Соответственно, решение может быть такое:
а) не указывать локаль, а в си само не подхватится.
б) указать явно какую-нибудь адекватную в самом начале программы.
no subject
Синглтон, фигле.
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
no subject
И почему в Вашей стране тангенс называется tg, хотя во всём остальном мире он tan?
(no subject)