![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
AD |
![]()
Сообщение
#1
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Вчера увидел одну немаловажную особенность С-шной функции atof, о которой хотел всех предупредить.
Ну во-первых, функция переводит строковое значение числа в вещественное число. Особенность функции заключается в том, что этот перевод зависит от locale, которое устанавливается функцией setlocale! Например, если в приложении установлено вот так:
Т.е. в данной системе знаковым разделителем будет являться запятая. А если вот так:
Помните об этой особенности, если пользуетесь подобными функциями (не Qt)! ![]() |
|
|
![]() |
Tonal |
![]()
Сообщение
#2
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Программисту нужно следить за тем, чтобы было удобно пользоваться его программой.
А за тем, что удобно было программисту должна отвечать среда программирования: язык, библиотеки, IDE... Представь, что строители начали строить дома ориентируясь только на то как ми удобно, мы бы жили в ямах и шалашиках из плит - это всяко проще "построить" чем возводить нормальный дом. ![]() Сообщение отредактировал Tonal - 25.8.2008, 7:21 |
|
|
AD |
![]()
Сообщение
#3
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Покопался в Qt-шных аналогах функции atof! Выяснилось, что функция ToDouble(bool* ok) тоже зависит от локали. Но есть отличия:
1) есть возможность увидеть ошибку быстрее, так как программисту предлагают после преобразования проверять значение ok 2) очень важное отличие - при установке такого формата setlocale(LC_ALL, 0) функция преобразует и строчку "1234,45" and "1234.45" в вещественное число 1234.45! Так что, если используете библиотеку Qt есть такие советы: 1) Указывать в приложении напрямую setlocale()! 2) Использовать qt-шные средства преобразования в вещественные числа! Преобразование легче отследить и немного универсальнее! P.S. Немцы молодцы! ![]()
Сообщение отредактировал AD - 26.8.2008, 11:38 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 24.6.2025, 4:00 |