#include #include #include #include int main(int argc, char *argv[])< float pi=3.14; // Укажем, что мы хотим форматировать числа, даты, валюты и пр. // по правилам русского языка setlocale(LC_ALL, "Russian"); // libc по умолчанию использует пользовательские настройки printf(«%f\n», pi); // 3,14 // Стандартные потоки по умолчанию используют локаль POSIX std::cout блоге у Евгения Степанищева на ещё один интересный пример, на этот раз из ранних версий PHP4, и решил, что пора писать обобщающий материал. Хотя бы для того, чтобы обратить на эту проблему внимание начинающих программистов.
Пример от Евгения (можно поиграться в песочнице). Установка локали в PHP 4.2.3 влияет на конвертацию строки в число:
Точка и запятая между цифрами
Целая часть от дробной в русском языке отделяется только запятой. Однако из этого не следует, что везде в русском тексте точка между цифрами должна быть заменена запятой: нужно сначала убедиться, что перед нами именно дробь.
Номера версий программных продуктов и ай-пи-адреса не являются дробями.
44 комментария
Илья Бирман 2009
Запятой разделяются классы (у нас — полупробелы), а десятичная часть — точкой.
bes island 2009
3¼ — а вот здесь целая часть от дробной не отделяется запятой.
Илья Бирман 2009
Kalan 2009
Всегда люто и бешено ненавидел это правило и ставил точку, потому что она, во-первых, нормально смотрится, а во-вторых, используется во всех языках программирования и т. п.
Картошка, лук, редиска и морковь стоят 3,85, 4,55, 2,99 и 5,67 рублей, соответственно. Пример немного надуманный, но демонстрирует, почему запятая как разделитель дроби — это плохо.
В общем, я использую точку, зоопарк стандартов разделения дробей не нужен. Это все равно, что использовать кириллицу в формулах.
Илья Бирман 2009
bes island 2009
«Картошка, лук, редиска и морковь стоят 3,85, 4,55, 2,99 и 5,67 рублей, соответственно» — это не «немного надуманный» пример, а совершенно неестественная фраза.
Обычный человек запишет: «Картошка стоит 3,85; лук — 4,55; редиска — 2,99; а морковь — 5,67»; или вовсе оформит это таблицей.
Роман 2009
Все и так в курсе. В чем смысл поста?
Павел Малинников 2009
а кто их посчитал дробями?
somniator 2009
«Картошка стоит 3,85; лук — 4,55; редиска — 2,99; а морковь — 5,67» — Вам пришлось использовать точку с запятой, потому что запятых получается слишком много для комфортного чтения. Это недостаток запятой в качестве разделителя целой и дробной части.
bes island 2009
А Вам «пришлось использовать» тире и точки. И запятую перед «потому что». Потому что если их не использовать, чтение получается некомформтным. Вот такой вот недостаток.
somniator 2009
2 bes island: Я использовал тире, точки и запятую согласно правилам русского языка. А Вы какими правилами руководствовались?
Георгий Тудоси 2009
Никогда не понимал, почему в русском языке не используется десятичная точка. Ведь цифры — это алфавит математики, а точка, +, − и прочие символы — это ее пунктуация. А математика не делится на «русскую» и всю остальную. Поэтому я считаю использование так называемой десятичной запятой нонсенсом.
Русский язык — живой язык, и он постоянно приспосабливается под потребности говорящих и пишущих на нем. Надеюсь, пройдет не слишком много времени до того светлого момента, когда десятичная запятая умрет де юре, — ведь де факто она умерла в момент начала широкого распространения компьютеров, как бы производители разнообразного софта ни пытались доказать обратное.
Георгий Тудоси 2009
Почему, кстати, символ «−» нормально не отображается?
Илья Бирман 2009
Потому, что в комментариях не поддерживается ХТМЛ, о чём написано для тупых.
bes island 2009
somniator, ими же.
Илья, а я пытался вставить дробь как символ, но всё равно вышел код 188.
Илья Бирман 2009
То, что у меня не поддерживается и УТФ-8 — тоже не новость. Допишу Эгею — будет.
У меня уже ощущение, что люди специально экзотические символы пихают, лишь бы лишний раз напомнить мне, что у меня нет УТФ-8.
bes island 2009
Странно слышать об «экзотических символах» от создателя раскладки своего имени.
Илья Бирман 2009
Что же за тупняк-то такой глобальный? Движок я писал в 2004 году. Я тогда даже не знал про УТФ-8 вообще. Мне нельзя было выпускать раскладку до того, как я перепишу e2? Это не единственное место, используйте раскладку в других местах.
ИМХО 999.99 р. смотрится симпатичнее 999,99 р.
А уж разделять запятыми классы — такой бред я встречал один раз в жизни на жестко-китайском калькуляторе с музыкой. Пользоваться я им так и не смог.
Георгий Тудоси 2009
Илья, специально для тупых: я нажимаю на клавиатуре Ctrl+Alt+M, чтобы получить знак «минус». Где тут HTML?
Про UTF-8 уже прочитал, так что можете не отвечать.
bes island 2009
Илья, у вас какая-то неадекватно отрицательная реакция.
Илья Бирман 2009
Тихвинский Дима (Devgru) 2009
Илья, Вы не читали Getting Real от 37signals?
Там как раз упоминается, что если какой-то функциональности в программе действительно недостаёт — пользователи будут так или иначе раз за разом напоминать об этом. Так и получается на этом блоге с UTF-8.
Илья Бирман 2009
Конечно читал. Без этой книжки разработчик профнепригоден 🙂
Вы совершенно правы, и проблема с УТФ-8 даже уже решена в моих внутренних билдах. Но там есть другие проблемы, которые пока не позволяют перейти мне тут на новьё.
Роман Добровенский 2009
Георгию Тудоси:
Вы очень сильно заблуждаетесь говоря о том, что математика стандартизированна. Например, в русской традиции принято обозначать количество сочетаний из n по k через большую букву «С», во всем же остальном мире принято обозначать сочетания так же как и матрицу 2x1 (и это оправданно, так как сочетания допускают огромное количество манипуляций со своими параметрами, в качестве которых порой выступают экстремально сложные выражения).
Рекомендую еще почитать современные французские учебники по математике — вы будете шокированы. У французов, например, число «ноль» одновременно и положительное и отрицательное, а перемножение матриц осуществляется совершенно не так как у нас (вместо умножения строк левой матрицы на столбцы правой, они умножают столбцы левой на строки правой). Это из невинного.
Или вот еще: у нас знак деления часто обозначают двоеточием. В любой западной литературе двоеточие между двумя числами может лишь показывать отношение между двумя величинами, но никак не деление (что тоже крайне разумно, так как дети с пеленок начинают манипулировать дробями — у нас же в школах приходится вводить дроби отдельно, что просто глупая трата времени).
Что касается точки как разделителя целой и дробной части, то мне по большому счету наплевать. Я все равно в основном пишу на английском [смайл, показывающий язык].
Антон Вернигор 2009
Когда пишу «для себя» (какие-нибудь заметки, например), то ставлю точку как десятичный разделитель. Для меня это привычнее, несмотря на то, что неправильно. И выглядит на мой взгляд гармоничнее.
Когда готовлю что-либо к публикации, ставлю запятые. Потому что «так надо».
Олежик 2009
Да. Ибо традиции надо блюсти.
П
ри этом нельзя не признать, что «нерусская» традиция отделять десятичные точкой гораздо практичнее.
Ярослав 2009
Георгий Тудоси, вы, вероятно, удивитесь, но десятичная запятая — не отличительный признак какой-нибудь особенной «русской» математики: она используется в большинстве стран. Десятичная точка используется только в англоговорящих странах и их бывших колониях, а также в государствах, тесно связанных с английским миром, например, в Японии и Южной Корее. Это характерная особенность именно английского языка, так что, уж простите, довольно глупо говорить о том, что использование десятичной запятой — нонсенс, и она «де-факто умерла».
СИ, тем не менее, разрешает использовать или запятую, или точку по выбору, но с оговоркой «The decimal marker chosen should be that which is customary in the context concerned». Любопытно, что в этом документе запрещается использование запятой или точки в качестве разделителя разрядов.
Саша Смирнов 2009
«Запрещается» — но не карается. И там вот ещё какой запрет:
t = 30.2 °C,
but not t = 30.2°C,
nor t = 30.2° C
(А сколько крови пролито за это. )
#4 Юрко 1 июня 2009, 20:49
Картошка, лук, редиска и морковь стоят 3,85, 4,55, 2,99 и 5,67 рублей, соответственно.
. 5,67 рубля соответственно. (Пять и 67 сотых рубля; да и «соответственно» в конце не является вводным словом.)
bes island 2009
Правда, что ли, знак градуса должен отделяться от числа?
Илья Бирман 2009
Знак градуса отделяться от числа не должен, точно так же, как и знаки минуты и секунды. Например: 10°. Однако знак градуса Цельсия должен отделяться от числа: 10 °C.
Георгий Тудоси 2009
От числа часто должен отделяться не только знак градуса, но и любое обозначение единицы измерения. Правило очень простое: если при написании величины словами пробел ставится, то он нужен и при написании цифрами. Поэтому, например, «концентрация раствора 15 %», но «15%-ный раствор».
Правда, в эту концепцию не вписывается «+10 °С», поскольку «плюс десять градусов Цельсия», с пробелом между градусом и Цельсием. Возможно, есть и другие исключения, но я их не знаю.
Илья Бирман 2009
bes island 2009
Мне кажется, единицей измерения здесь является «C» — градус Цельсия; а «°» — вспомогательный, несамостоятельный значок, используемый только для градусов и заменяющий обычную в других случаях шпацию.
Саша Смирнов 2009
Я только заострил «меч правды». Издательство такое дело, что чем больше однообразия (в обозначениях того же самого), тем легче всем работать.
Но обычный читатель (даже и не тупой) не часто любуется красотой значков — он черпает информацию.
Так вот: градус (°), как прочие единицы СИ, ДОЛЖЕН от цифр (указывающих число этих градусов) быть отделён — как и любое «номальное» слово. Но есть какие-то. психофизиологические, что ли. законы набора текста: вот даже умный Devgru пишет (или пускай даже берёт с солидного сайта):
Как любит говорить хозяин блога, «ау, пробел?»! Таков реал!
Илья Бирман 2009
Вы удивительно путанно излагаете, совершенно неизвестно, о чём этот комментарий.
Саша Смирнов 2009
«нормальное» (извините, не до шуточек)
Ярослав 2009
Странно, я думал, что обозначение градусов Цельсия для всех очевидно. В школе на уроках физики ведь наверняка показывали, как правильно 🙂
Ярослав 2009
bes island, а зачем строить предположения? В СИ написано: «The unit of Celsius temperature is the degree Celsius, symbol °C».
Артём Сапегин 2009
Забавно, что в Яндексе об этом не знают и новая выбиралка товаров на Маркете принимает числа только через точку.
Фёдор 2009
Кстати, если вдруг кому-то интересно, что думает товарищь Гейтс и его кодла по поводу десятичных и классовых разделителей в России и других странах, можно посмотреть тут (пишу для аглицкой ХР, для других Виндов аналогично): Control Panel -> Regional and Language Options -> Regional Options.
Для себя я обычно в тексте ставлю точку, а в таблицах запятую.
Головинов Антон 2009
Артём Сапегин, ну это только от лени программистов. Яваскрипт не понимает запятые в дробях. Что, правада, не оправдывает использование точки. У меня решение этой проблемы заняло две минуты времени и 3 строчки кода.
Денис Киселев 2009
Прочитал заметку. Не понял, зачем она: это же очевидно.
Пошел в комментарии. Сильно удивился: сколько, оказывается, людей, для которых неочевидно именно первое, вводное предложение, хотя заметка-то, в общем, говорит не о том, что надо менять точку на запятую, а о том, когда этого делать не надо.
Тихвинский Дима (Devgru) 2009
2Саша Смирнов
37signals — название конторы, имя собственное, употребляется везде именно в таком виде. Я думаю это достаточая причина чтобы пробел не ставить. Хотя, мнение Ильи по этому вопросу тоже интересно услышать.
Илья Бирман 2009
Я не испытываю большого трепета по отношению к названиям, использующим ПаскалевскуюНотацию, цифрывну3слов и прочую хрень, поэтому, например, я пишу «Айфон», а не «айФон». «37 сигналов» я пишу по-русски и, конечно, с пробелом.
Георгий Тудоси 2009
Жаль, нет возможности отвечать здесь, но конкретным людям. Илья, может быть, все-таки стоит подумать о древовидных комментариях? Люди часто хотят общаться друг с другом, а сейчас это не очень удобно. Про возможность отвечать людям по почте я знаю, если что. (Кстати, грош цена заявлению о том, что «адрес не будет опубликован», если все адреса комментаторов приходят подписавшемуся на дискуссию по почте.)
#19: Я невнятно выразился, извините. Я считаю математику универсальным языком, который должен быть стандартизован. Поскольку де-факто международным (научным) языком давно стал английский, думаю, логично привести математическую типографику (и вообще правила записи) именно к правилам, принятым в этом языке. Уверен, что преимущества от этого перевесят все трудности, связанные с процессом перехода. Хотя мне и странно писать «tan» вместо привычного «tg» (ау, знатоки, я правильно написал?), как-нибудь перестроюсь.
#22: Возможно, вы и правы, но точка используется в наиболее развитых (в отношении науки и техники) странах. Для меня это прямое указание на то, к чему следует стремиться.
#25: http://gramota.ru/biblio/public/32_8 — там вообще про пробелы много написано. И к этому сайту я привык обращаться во всех сложных случаях, когда не уверен в собственной правоте.
#31, 32, 33: А вот в продуктах Adobe можно ставить в качестве десятичного разделителя запятую. Она корректно обрабатывается. и немедленно заменяется (в полях для ввода чисел, не в тексте, конечно) на точку. Очень правильное поведение, по-моему. Набирай, как привык, а написано будет, как правильно.