Нет. Настройка этого - в вашей Windows - .NET просто берёт информацию оттуда. Если Вы исправите это в Windows, то и в .Net всё будет с точкой
Это как бы ожидаемо. Но я имел в виду иное. В MS Office региональные настройки можно брать из Windows, а можно установить свои, только в пределах офиса. Т.е. если я работаю с разделителем-точкой, а мне нужно написать программу для Excel и там хотят, чтобы была запятая, то я делаю временные настройки в офисе - и все, спокойно там отлаживаюсь. А в паскале, к примеру, точка остается точкой.
Мы потратили достаточно много времени чтобы в наших стандартных функциях точка оставалась точкой.
Но если граждане пользуются голыми методами .NET, то в русских Windows там будет запятая. И им будут советовать установить английскую культуру, что вообщем быстро и неправильно.
Там в en_US возникает проблема с запятой после тысяч. Где-то пишут, надо ставить некую “нейтральную культуру” и там уже править. Но я не понял, как это делать и есть ещё дополнительная проблема с разделителем тысяч - не совсем понятно, как туда поставить пустое место, так как пустое место не буква, а строка.
запятые не нужны.
Кто бы спорил и пробелы тоже. Как это c гарантией убрать? Похоже я ошибался с пустой строкой, и где-то какая-то отдельная опция должна быть для отмены разделителей тысяч?
У меня не возникает:
begin
var r := 123456.789;
r.ToString(new System.Globalization.CultureInfo('en-US')).Print;//выводит "123456.789"
end.
И кроме того, нечего там разбираться. Если я правильно понял - вы говорите про форматирование текста для большей читабельности. К примеру:
begin
var r := 123456789;
var nf := (new System.Globalization.CultureInfo('en-US')).NumberFormat;
nf.NumberGroupSeparator := '-';//По умолчанию ','
r.ToString('N', nf).Println;//123-456-789.00
nf.NumberGroupSizes := new integer[0];
r.ToString('N', nf).Println;//123456789.00
end.
Первый вариант легче читать человеку. Но и компьютер может его прочитать:
begin
var s := '123-456-789.10';
var nf := (new System.Globalization.CultureInfo('en-US')).NumberFormat;
nf.NumberGroupSeparator := '-';
var r := System.Convert.ToDouble(s,nf);
writeln(r);//123456789.1
end.
Вот такое мнение бывает когда на левых ресурсах читаешь. На msdn чёрным по белому написано что для этого надо всего лишь вместо 'en-US'
передать пустую строку.
То есть способ обнулить NumberGroupSize
очевиден и не ‘костыль’?
Не совсем - я говорю о том, что en-US это целый набор установок, в том числе и с запятой, как разделитель тысяч, которая не особо понятно когда включается и выключается.
С чего Вы взяли? Это был форум Microsoft по обсуждению их новой разработки, которая не работала в странах с запятой в качестве десятичного разделителя.
“Нельзя преобразовать тип array of real к array of integer” Почему так нельзя:
begin
var n := 10;
var a := ArrFill(n, 2);
a := a.Select((el, ind)-> Power(el, ind)).ToArray; // тут ошибка
a.Println;
end.
а так можно:
begin
var n := 10;
var a := ArrFill(n, 2);
var b := a.Select((el, ind)-> Power(el, ind)).ToArray;
b.Println;
end.
После возведения в степень получается массив вещественных. Он несовместим с массивом целых
Меня сбил с толку intellisense вот только что он показывал, что массив b это массив of integer, а сейчас уже показывает, что of real. Жаль что не заскринил… Погодите а вот у меня есть еще другой похожий код там видно
Intellisence - он на самом деле не такой уж и intelli. Бывает, что пока не откомпилируешь программу, он не понимает, с каким типом данных имеет дело. А уж если программа содержит ошибки, не дающие ее откомпилировать, вероятность “странностей” увеличивается в разы.
Хорошо работает Intellisence, если программа сразу набирается безошибочно. А если что-то переопределить, может и соврать. Пока вот так.
здесь точно показывает массив целых, хотя должен бы риал, или нет?
begin
var n := 10;
var a := Range(1, n).Select(el -> Power(2, el)).ToArray;
a.Println;
end.
Вы прочитали мой предыдущий пост? Откомпилировали?
Конечно, тут тип real[10]. Врёт. Не может он понять, что получится после проекции с лямбдой, вызывающей функцию.
Ну конечно, программа запускается и выдает результат, но почему пишет, что массив целых, если после Power должен получиться массив вещественных?
Наверно все же потому, что это Intellisence - это небольшая вспомогательная программа, а не полноценный компилятор. Если Вам нужна точная информация о типе, ставьте отладочную точку прерывания и после запуска программы смотрите его в локальных переменных.
О, благодарствую, полезная информация. Но наверное этот случай нужно закинуть в ошибки?
А это уж Вам решать…
Это в issue может быть вопрос - кидать или нет. А в ошибки на форуме можно и желательно кидать всё что странно работает. Там уже решат - ошибка или нет, и если это новая ошибка - кинут в issue.
Здравствуйте, изучая программирование, наткнулся на головоломку по питону
Решил тоже самое провернуть в PascalABC (версия 3.4, сборка 1672 от 10.06.2018).
1 Пример
2 Пример
Почему в 1 примере произошла ошибка, а во 2 все отработало? Ведь поменять поля кортежа после его создания невозможно.