Здравствуйте, гость ( Вход | Регистрация )
kwisp | Дата 5.10.2010, 13:03 |
Цитата $ locale LANG=ru_RU.utf8 LC_CTYPE="ru_RU.utf8" LC_NUMERIC=C LC_TIME="ru_RU.utf8" LC_COLLATE="ru_RU.utf8" LC_MONETARY="ru_RU.utf8" LC_MESSAGES="ru_RU.utf8" LC_PAPER="ru_RU.utf8" LC_NAME="ru_RU.utf8" LC_ADDRESS="ru_RU.utf8" LC_TELEPHONE="ru_RU.utf8" LC_MEASUREMENT="ru_RU.utf8" LC_IDENTIFICATION="ru_RU.utf8" LC_ALL=
Цитата $ ./a.out 15.5 14.2 14.2 15.5 0 все как видишь работает LC_NUMERIC=C - этим ты локаль вроде не портишь |
|
NordWest | Дата 5.10.2010, 12:52 |
Не очень понял всех докладчиков. У меня такая проблема. На debian стоят такие локали: Цитата LANG=ru_RU.KOI8-R LC_CTYPE="ru_RU.KOI8-R" LC_NUMERIC="ru_RU.KOI8-R" LC_TIME="ru_RU.KOI8-R" LC_COLLATE="ru_RU.KOI8-R" LC_MONETARY="ru_RU.KOI8-R" LC_MESSAGES="ru_RU.KOI8-R" LC_PAPER="ru_RU.KOI8-R" LC_NAME="ru_RU.KOI8-R" LC_ADDRESS="ru_RU.KOI8-R" LC_TELEPHONE="ru_RU.KOI8-R" LC_MEASUREMENT="ru_RU.KOI8-R" LC_IDENTIFICATION="ru_RU.KOI8-R" LC_ALL= В вычислениях везде точки и под виндой проблем не возникает. В линуксе же воспринимаются запятые, а у чисел точками отбрасывается дробная часть. Вот например код:
Если в командной строке ввести 15.5, то d=15, а если 15,5 - 15.5. Причём qDebug() выдает точки. Пишу вначале main команду setlocale(LC_ALL, 0); - результата тот же. С QLocale::setDefault(QLocale::C); - то же самое. Если считывать данные из файла - результат будет аналогичным. А мне нужно и локаль себе не портить системную и чтобы программа работала с точками. |
|
Andrew Selivanov | Дата 27.8.2008, 12:37 |
А вот std::stringstream (#include <sstream>) как стандартный способ преобразования почему-то никто и не вспомнил... | |
AD | Дата 26.8.2008, 13:16 |
И что ты с америкосовской записью будешь делать где тысячи запятой отделяются а десятые точкой? Я же говорю - разделитель от локали зависит. А кому вопрос? Да и... я разве спорил с этим? Цитата 1) Указывать в приложении напрямую setlocale()! |
|
Tonal | Дата 26.8.2008, 12:59 |
И что ты с америкосовской записью будешь делать где тысячи запятой отделяются а десятые точкой? Я же говорю - разделитель от локали зависит. |
|
AD | Дата 26.8.2008, 12:04 |
Цитата вообще я думаю так бы оно и должно бы быть, а отделять группы разрядов можно и сверху (апострофом) Но америкосы используют для этого запятую. Ну это уже локальные вещи. В крайних случаях при работе с такими заказчиками просто заранее обсуждать эти моменты!!! На примере Германии я уже показал, что я не один такой, который считает, что оба разделителя считать адекватными! |
|
Litkevich Yuriy | Дата 26.8.2008, 11:44 |
функция преобразует и строчку "1234,45" and "1234.45" вообще я думаю так бы оно и должно бы быть, а отделять группы разрядов можно и сверху (апострофом) Но америкосы используют для этого запятую. |
|
AD | Дата 26.8.2008, 11:37 |
Покопался в 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. Немцы молодцы!
|
|
Tonal | Дата 25.8.2008, 7:21 |
Программисту нужно следить за тем, чтобы было удобно пользоваться его программой. А за тем, что удобно было программисту должна отвечать среда программирования: язык, библиотеки, IDE... Представь, что строители начали строить дома ориентируясь только на то как ми удобно, мы бы жили в ямах и шалашиках из плит - это всяко проще "построить" чем возводить нормальный дом. |
|
niXman | Дата 23.8.2008, 14:03 |
AD, Не подумал бы Спасибо, буду внимателен. а по мне дак это чушь полная, т.к. в исходном коде программ десятичный разделитель всегда был точкой! Абсолютно верно! Но в связи с повсеместным распространением кривых программ, которые не учитывают локаль, сейчас часто используют и точку и запятую. Я всегда, в независимости от локали, заменяю запятую на точку, до передачи функции. Лично по мне, так я не считаю удобным то, что программисту приходится следить за тем, что поставлено: точка или запятая. Мне кажется, что надо бы было сделать функцию так, чтобы она понимала оба этих разделителя одновременно. Опять верно! |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 19.4.2024, 22:35 |