metaclass: (Default)
[personal profile] metaclass
Внезапно: а вот как положено в коде на С конвертить строку в double, если мы точно знаем, что в строке десятичный разделитель ".", и точно знаем, что код будут запускать на системе с адовыми локалями, у которых разделитель "," типа русской, белорусской итд? В дотнете, как положено, есть функция с параметром для локали и инвариантная локаль InvariantCulture. А в олдскульно-кошерном C как? setlocale(LC_NUMERIC,"C"); чо-то не рекомендуют, говорят, не thread-safe.

Date: 2012-01-22 07:39 pm (UTC)
From: [identity profile] nicka-startcev.livejournal.com
не тред-сэйф -- значит вызвать один раз глобально, до того, как наплодить кучку тредов!

Date: 2012-01-22 07:41 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Ок. Если будет работа с гуем - юзера увидят разделитель не в своей локали (им в 99% похер, но мало ли).

(no subject)

From: [identity profile] nicka-startcev.livejournal.com - Date: 2012-01-22 07:50 pm (UTC) - Expand

(no subject)

From: [identity profile] max630.livejournal.com - Date: 2012-01-22 10:41 pm (UTC) - Expand

Date: 2012-01-22 07:45 pm (UTC)
From: [identity profile] justy-tylor.livejournal.com
Вставить в проект кусочек public domain кода, который делает это независимо от рантайма.

Date: 2012-01-22 08:06 pm (UTC)
From: [identity profile] metaclass.livejournal.com
А потом у меня юниоры спрашивают "а чего это у тебя половина стандартной либы в свою собственную библиотеку вынесена" :)

(no subject)

From: [identity profile] gds.livejournal.com - Date: 2012-01-22 08:09 pm (UTC) - Expand

(no subject)

From: [identity profile] qehgt.livejournal.com - Date: 2012-01-22 08:12 pm (UTC) - Expand

(no subject)

From: [identity profile] justy-tylor.livejournal.com - Date: 2012-01-22 08:36 pm (UTC) - Expand

Date: 2012-01-22 07:46 pm (UTC)
From: (Anonymous)
судя по всему никак, без своих или сторонних велосипедов(типа glib и т.д.)

--
xaep

Date: 2012-01-23 06:24 am (UTC)
From: [identity profile] hshhhhh.livejournal.com
Внезапно -- хаер!

Date: 2012-01-22 08:13 pm (UTC)
From: [identity profile] dair-spb.livejournal.com
Чото у меня даже с локалью ru_RU.UTF-8 strtod воспринимает точку, но не запятую.

Date: 2012-01-22 08:21 pm (UTC)
From: [identity profile] metaclass.livejournal.com
LC_NUMERIC="ru_RU.... ?

(no subject)

From: [identity profile] dair-spb.livejournal.com - Date: 2012-01-22 08:22 pm (UTC) - Expand

Date: 2012-01-22 08:28 pm (UTC)
From: [identity profile] metaclass.livejournal.com
 d = strtod("1.2",&t);
 printf("%f\n",d);

 setlocale(LC_NUMERIC,"ru_RU.UTF8");
 d = strtod("1,2",&t);
 printf("%f\n",d);


все работает, как положено, выдает 1.2 и 1,2

(no subject)

From: [identity profile] dair-spb.livejournal.com - Date: 2012-01-22 08:36 pm (UTC) - Expand

Date: 2012-01-22 08:31 pm (UTC)
From: (Anonymous)
а setlocale(LC_ALL, "") сначала дёргали? а то оно без лишних телодвижений локаль из переменных окружения не ухватит.

--
xaep

Date: 2012-01-22 09:14 pm (UTC)
From: [identity profile] madeveloper.livejournal.com
Плюсы не катят? Там можно stringstream со своей locale.

Date: 2012-01-22 09:23 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Счас придет айсед и накажет за упоминание плюсов :)

(no subject)

From: [identity profile] madeveloper.livejournal.com - Date: 2012-01-23 07:52 pm (UTC) - Expand

Date: 2012-01-22 09:35 pm (UTC)
From: [identity profile] tzirechnoy.livejournal.com
1) Вы используете трэды? Тогда мы летим к вам (злобные баги).
2) Мнение, что разделителем можэт быть запятая -- это ересь, посему setlocale(LC_NUMERIC, "C")
3) char *dot;
if ((dot = strchr(s, '.'))) {
*dot = *nl_langinfo(RADIXCHAR);
}

Date: 2012-01-22 09:39 pm (UTC)
From: [identity profile] fas-tm.livejournal.com
А как без них писать GUI нормальное ? А долгоиграющие бэкграунд воркеры ?
Расскажите.

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-01-23 06:42 am (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2012-01-23 06:59 am (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2012-01-23 08:23 am (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2012-01-23 08:36 am (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2012-01-23 10:17 am (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2012-01-23 10:39 am (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2012-01-23 11:37 am (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2012-01-23 12:06 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2012-01-23 12:14 pm (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2012-01-23 12:25 pm (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2012-01-23 12:40 pm (UTC) - Expand

(no subject)

From: [identity profile] tzirechnoy.livejournal.com - Date: 2012-01-23 05:48 pm (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2012-01-23 06:31 pm (UTC) - Expand

(no subject)

From: [identity profile] tzirechnoy.livejournal.com - Date: 2012-01-23 08:56 pm (UTC) - Expand

(no subject)

From: [identity profile] tzirechnoy.livejournal.com - Date: 2012-01-23 05:46 pm (UTC) - Expand

(no subject)

From: [identity profile] tzirechnoy.livejournal.com - Date: 2012-01-23 08:54 am (UTC) - Expand

(no subject)

From: [identity profile] tzirechnoy.livejournal.com - Date: 2012-01-23 08:55 am (UTC) - Expand

(no subject)

From: [identity profile] fas-tm.livejournal.com - Date: 2012-01-23 09:46 am (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2012-01-23 10:43 am (UTC) - Expand

(no subject)

From: [identity profile] fas-tm.livejournal.com - Date: 2012-01-23 10:59 am (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2012-01-23 11:20 am (UTC) - Expand

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2012-01-23 11:40 am (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2012-01-23 11:53 am (UTC) - Expand

(no subject)

From: [identity profile] tzirechnoy.livejournal.com - Date: 2012-01-23 05:54 pm (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2012-01-23 06:34 pm (UTC) - Expand

(no subject)

From: [identity profile] tzirechnoy.livejournal.com - Date: 2012-01-23 05:53 pm (UTC) - Expand

(no subject)

From: [identity profile] tzirechnoy.livejournal.com - Date: 2012-01-23 05:51 pm (UTC) - Expand

Date: 2012-01-22 10:28 pm (UTC)
From: [identity profile] max630.livejournal.com
*scanf игнорирует локаль, afaik

Date: 2012-01-22 10:36 pm (UTC)
From: [identity profile] max630.livejournal.com
хм, не игнорирует.

Date: 2012-01-22 11:25 pm (UTC)
From: [identity profile] freetiger.livejournal.com
положено-не знаю, я я бы делал компонент gui-платформа-предобертка как принцип

Date: 2012-01-23 12:39 am (UTC)
From: [identity profile] freetiger.livejournal.com
положено-не знаю, я я бы делал компонент gui-платформа-предобертка как принцип

Date: 2012-01-23 02:40 am (UTC)
From: [identity profile] antontsau.livejournal.com
настоящие юзеры в советских бухгалтериях пишут И точку И запятую. Типа 100.000,500 (ну или наоборот). Я на это нарвался еще в 86 году. Кто-то в какой-то замкадской дыре заполнил бумажный статопросник именно так, другой юзер ни на секунду не усомнясь ввел это в ЕСину, а у меня в статистике получились два и две трети библиотекаря.

Date: 2012-01-23 05:01 am (UTC)
From: [identity profile] blackyblack.livejournal.com
Я всю жизнь думал, что strtod только с точкой разделителем работает... Как выяснилось, локаль всё-таки влияет. Но вон ниже пишут, что влияет локаль только если явно задать, а по умолчанию, видимо, должна быть точка.
Соответственно, решение может быть такое:
а) не указывать локаль, а в си само не подхватится.
б) указать явно какую-нибудь адекватную в самом начале программы.

Date: 2012-01-23 05:45 am (UTC)
From: [identity profile] anatoly borodin (from livejournal.com)
> setlocale(LC_NUMERIC,"C"); чо-то не рекомендуют, говорят, не thread-safe.


Синглтон, фигле.

Date: 2012-01-23 07:01 am (UTC)
From: [identity profile] thedeemon.livejournal.com
расскажите про синглтоны в Си, и про контролирование порядка их инициализации, пожалуйста

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-01-23 07:10 am (UTC) - Expand

(no subject)

From: [identity profile] blackyblack.livejournal.com - Date: 2012-01-23 07:16 am (UTC) - Expand

(no subject)

From: [identity profile] anatoly borodin - Date: 2012-01-23 07:19 am (UTC) - Expand

(no subject)

From: [identity profile] anatoly borodin - Date: 2012-01-23 07:21 am (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2012-01-23 07:50 am (UTC) - Expand

(no subject)

From: [identity profile] gineer.livejournal.com - Date: 2012-01-23 03:52 pm (UTC) - Expand

Date: 2012-01-23 08:58 am (UTC)
From: [identity profile] tzirechnoy.livejournal.com
Ну, в общем, да. Но трэды -- всё равно зло.

Date: 2012-01-23 07:12 am (UTC)
From: [identity profile] vp.livejournal.com
Откуда вообще в нашей стране в качестве разделителя взялась запятая? Бесед.

Date: 2012-01-23 07:26 am (UTC)
From: [identity profile] anatoly borodin (from livejournal.com)
А в Германии откуда, в Италии? Точка только у пиндосов, киви и чайна: en.wikipedia.org/wiki/Decimal_mark#Hindu-Arabic_numeral_system

И почему в Вашей стране тангенс называется tg, хотя во всём остальном мире он tan?

(no subject)

From: [identity profile] blackyblack.livejournal.com - Date: 2012-01-23 09:59 am (UTC) - Expand

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 29th, 2025 02:57 am
Powered by Dreamwidth Studios