- Что делать, если программа умножает все числа на 1000
- Настройка Windows 7
- Настройки для Windows 8
- Настройки для Windows XP
- Как установить разделитель целой и дробной части числа в Windows 7
- Как установить разделитель целой и дробной части числа в Windows?
- Windows разделитель целой части
- Лучший отвечающий
- Вопрос
- Ответы
- Windows разделитель целой части
- Лучший отвечающий
- Вопрос
- Ответы
- Все ответы
Что делать, если программа умножает все числа на 1000
В некоторых случаях пользователи жалуются, что программа при вводе чисел сама автоматически умножает их на 1000, например: создаем в справочнике товаров новый товар, указываем его цену — 3 рубля, сохраняем товар в базе данных, опять открываем карточку товара и видим, что цена товара изменилась и сама собой стала 3000 рублей.
Дело тут не в ошибках программы, а в настройках Windows. Как вы, наверное, знаете, в разных странах принято по-разному писать числа с дробной частью. Например, в Советском Союзе было принято при записи числа отделять целую часть от дробной запятой, например: «1,23», тогда как в американской системе для этих же целей служит точка: «1.23». В настройках операционной системы Windows вы можете указать, какой символ вы хотите использовать в качестве разделителя; программа Тирика-Магазин умеет работать и в том случае, если в качестве разделителя целой и дробной части используется запятая, и в случае, если используется точка.
В Windows есть еще одна настройка: разделитель групп разрядов. Человеку сложно прочитать число с большим количеством знаков, например, «1234765785678», и для того, чтобы сделать такую запись более читаемой, его часто записывают так: «1 234 765 785 678» либо так: «1,234,765,785,678» разделяя группы разрядов (единицы, тысячи, миллионы) каким-либо символом, например, пробелом или запятой. Программа Тирика-магазин понимает такую запись числа и может правильно прочитать это число в любом из трех приведенных вариантов записи.
Проблемы начинаются в случае, если, например, в качестве разделителя групп разрядов в Windows указана запятая, а в качестве разделителя целой и дробной части — точка. В этом случае программа Тирика-Магазин не может понять, где у числа целая и где дробная часть, и может посчитать число «1,023» как «одна тысяча двадцать три», тогда как имеется в виду «одна целая двадцать три тысячных». В этом случае вам нужно перенастроить Windows т.о., чтобы у нее в настройках не было указано в качестве разделителя групп разрядов запятая, а в качестве разделителя целой и дробной части — точка (или наоборот). Хорошей идеей будет использовать в качестве разделителя групп разрядов пробел, а в качестве разделителя целой и дробной части точку либо запятую — как вам будет удобнее.
Ниже мы расскажем, как перенастроить Windows для того, чтобы программа не путала эти разделители.
Настройка Windows 7
Нажмите кнопка Пуск, далее Панель Управления (см. снимок окна ниже):
В панели управления зайдите по ссылке в секцию «Часы, язык и регион» и вы попадёте в следующее окно:
В этом окне выберите ссылку «Изменение форматов даты, времени и чисел» и вы попадёте в окно «Язык и региональные стандарты»:
Далее в этом окне нажать кнопку «Дополнительные Параметры» и вы попадёте в окно, где нужно внести правильные настройки:
В открывшемся окне на закладке числа проверить, что стоит в опциях «разделитель целой и дробной части» и «разделитель групп разрядов». Если в одной из этих опций стоит запятая, а в другой точка, или наоборот, или и там и там стоит точка либо запятая, необходимо изменить параметры следующим образом:
- Разделитель целой и дробной части — выставить то, к чему привыкли, например, либо запятую, либо точку
- Разделитель групп разрядов — поставить пробел
После внесения изменений в настройки нужно нажать кнопку ОК для сохранения изменений. Для того, чтобы новые параметры вступили в силу, перезапустите программу Тирика-магазин.
Настройки для Windows 8
В Windows 8 нет привычной нам по предыдущим версиям кнопки Пуск, поэтому в Панель Управления Windows нужно попасть другим способом:
- Опустить мышь в правый нижний угол экрана
- Справа выдвинется панель — нажать кнопку с шестерёнкой по имени «параметры»
- Выдвинется другая панель — на ней выбрать пункт «Панель Управления»
- В Панели Управления в секции «Часы, язык и регион» выбрать ссылку «Изменение форматов даты, времени и чисел», нажать кнопку «дополнительные параметры»
- Далее аналогично инструкциям для Windows 7 выше
После внесения изменений в настройки нужно нажать кнопку ОК для сохранения изменений. Для того, чтобы новые параметры вступили в силу, перезапустите программу Тирика-магазин.
Настройки для Windows XP
Зайдите, пожалуйста, в меню Пуск, далее выберите Панель Управления, и в панели управления выберите раздел «Дата, время, язык и региональные стандарты»:
В открывшемся окне выберите «Изменение формата отображения чисел, даты и времени»:
После этого вы попадёте в окно «Язык и региональные стандарты». В этом окне на закладке «Региональные параметры» нажмите кнопку «Настройка»:
В открывшемся окне необходимо на закладке «Числа» проверить, что именно стоит в опциях «разделитель целой и дробной части» и «разделитель групп разрядов». Если в одной из этих опций стоит запятая, а в другой точка, или наоборот, или и там и там стоит точка либо запятая — изменить параметры следующим образом:
- Разделитель целой и дробной части — выставить то, к чему вы привыкли, например, запятую либо точку
- Разделитель групп разрядов — поставить пробел:
После внесения изменений в настройки нужно нажать кнопку ОК для сохранения изменений. Для того, чтобы новые параметры вступили в силу, перезапустите программу Тирика-Магазин.
Как установить разделитель целой и дробной части числа в Windows 7
При добавлении и редактировании числовых данных в программе «Учёт взносов в СНТ» могут возникать ошибки, если в настройках операционной системы Windows в качестве разделителя целой и дробной части на американский манер установлена запятая. И по-умолчанию (если ничего не исправлять) в настройках установлена именно запятая.
Но еще со школьных времен мы знаем, что у нас принято использовать в качестве разделителя целой и дробной части чисел точку. Это и привычнее нашему менталитету и программа «Учёт взносов» корректно работает, если в качестве разделителя целой и дробной части числа используется именно точка.
Как установить разделитель целой и дробной части числа в Windows?
Рассмотрим порядок действий по изменению настройки символа, используемого в качестве разделителя целой и дробной части чисел на примере Windows 7. Для других версий операционной системы Windows интерфейс окон может быть несколько другим, но основной смысл сохраняется.
Первое, что необходимо сделать — это войти в панель управления системы Windows. Это можно сделать разными способами. Самый простой — это щелкнуть мышью по пункту «Панель управления» в меню «Пуск»:
Затем в появившемся окне со списком инструментов панели управления, надо щелкнуть мышкой по пункту «Часы, язык и регион»:
После этого, в появившемся окне щелкнуть по пункту «Язык и региональные стандарты»:
Затем, в окне «Язык и региональные стандарты» в нижней части закладки «Форматы» надо нажать на кнопку «Дополнительные параметры…»:
После чего, в появившемся окне «Настройка формата» на закладке «Числа» в поле «Разделитель целой и дробной части» надо ввести точку и затем в нижней части окна нажать кнопку «ОК»:
После выполнения этой настройки, проблем с вводом числовых данных в программу «Учет взносов» быть не должно.
Желаем Вам успешной работы с программой «Учет взносов в СНТ».
Желаю Вам приятной работы с программой «Учет взносов в СНТ»!
Windows разделитель целой части
Лучший отвечающий
Вопрос
Здравствуйте. Появилась проблемка. например в textbox вводим значение , умножаем на 3 и выводим результат.
если ввести 8,3 то все ок.. Если 8.3 то ошибка. Все это дело связано с тем что стоит в региональных стандартах в пункте разделитель целой и дробной части.Мне то ладно запятую поставлю, а заказчик требует чтобы и с точкой все работало. Можно конечно делать string.replace, но если компонентов textbox, гридов много? везде эти update делать не особо красиво. какой выход сделать?
Также все время неудобно при запросе к БД любое дробное число заменять с помощью stirng.replace(«,»,».») (select 1.34 и select 1,34 разница как бы ощутимая 🙂 )
1. Читал, где то что можно выставить разделитель целой и дробной части » «.» или «,»» (тоесть воспринимаются оба)
2. Сразу в приложении подменять разделитель точкой.ну ладно сменим, а потом при экспорте отчета в excel ни одна формула не заработает(так как разделитель в windows и в моем приложении разный). Тут либо внутри приложения делать разделитель точку а на выходе запятую? но я даже не представляю как это все будет выглядеть.
Подскажите как вы обходите эту ошибку?
Ответы
О какой платформе речь? Зная её, было бы удобней приводить примеры. Буду исходить из предположения, что это .NET.
Во-первых, для ввода чисел никогда не используйте TextBox. Используйте NumericUpDown (компонент WinForms) или аналогичные.
> заказчик требует чтобы и с точкой все работало
Шлите заказчика на три буквы. Если будет артачиться, дайте ему ссылку на этот тред, я лично его пошлю.
В разных культурах приняты разные разделители. И странно использовать те, которых быть не должно. Кроме того, в некоторых культурах могут одновременно использоваться и точка, и запятая в таком формате: 1,234,567.89 — представьте в каких раздумьях будет пользователь, привыкший к такому формату?
Вывод: культура приложения должна соответствовать культуре пользователя. Если возможна локализация на другие языки — предусмотрите это. Предоставьте пользователю самому выбирать, какую культуру он хочет использовать (где-то в настройках).
> все время неудобно при запросе к БД любое дробное число заменять с помощью stirng.replace
Это вообще о чём? Сильно подозреваю, что вы запрос в БД собираете конкатенацией строк. Вон из профессии! Откройте для себя параметры (или используйте ORM).
> внутри приложения делать разделитель точку а на выходе запятую?
Внутри приложения нет разделителей вообще! Числа float, double, decimal хранятся в памяти в определённом формате, и знать не знают ни о каких разделителях. Разделители имеют значение лишь при вводе-выводе, то есть при взаимодействии с пользователем. То есть, как я уже сказал вышел, предоставьте пользователю возможность выбора культуры (разделителя).
Аналогично, при экспорте куда-либо должна быть предусмотрена возможность выбора формата. Ведь и Excel будет ожидать разделители той культуры, которая сейчас выставлена. Однако, серьёзные приложения (такие как Excel) обычно могут принимать разные форматы — их можно задать при импорте данных.
Если что-то объяснил непонятно, спрашивайте ещё, уточняйте.
Windows разделитель целой части
Лучший отвечающий
Вопрос
Здравствуйте! Столкнулся с проблемой запуска разработанного приложения (.NET 4.0) на ПК с разными настройками.
Опытным путем было выявлено, что ошибки работы программы связаны с выбором разделителя в настройках Windows.
Наверняка это уже давно известная проблема, но в чем собственно дело?
Как избежать этого при разработке приложения? Как унифицировать код, что бы программа работала корректно на различных ПК. Спасибо.
Ответы
почитайте здесь, может поможет
и здесь, как раз о разделителе
Полагаю, у вас нигде не задаётся культура приложения. Это нужно сделать либо глобально, либо в каждом методе, где возможны разные формы ввода/вывода (типа метода ToString) указывать требуемую культуру. Смотрите CultureInfo.
Используйте анализатор кода в старших версиях Visual Studio или, если используете Express версию — бесплатный FxCop. Он выдаст вам все места, где возможны проблемы с культурой и форматами. Смотрите IFormatProvider.
Не надо руками выставлять культуру при запуске. Это поведение .NET по умолчанию. Если культура не выставляется — значит кто-то специально написал код для этого. Найдите его, и спросите зачем он это сделал 🙂 Т.е. «не работать» может всего в нескольких случаях:
1. В программе уже есть код, в котором вручную вписана культура, но не во всех местах. Поэтому разделители используются разные.
2. Где-то в коде числа разбираются вручную (или разбираются из строки вручную, а строку конвертируются через ToString c системной культурой).
Какого вида у вас «ошибки»? Исключения, ошибки рассчетов, неправильно разбираемый ввод от пользователей? Локализуйте конкретное место в отладчике, и чините его.
Все ответы
модифицируйте программу, добавив точку также к разделителям (то есть в программе «или точка, или запятая»)
отправьте код на мой email
Может можно обойтись каким-нибудь простеньким примером?
А по аналогии я сделаю все у себя.
почитайте здесь, может поможет
и здесь, как раз о разделителе
Полагаю, у вас нигде не задаётся культура приложения. Это нужно сделать либо глобально, либо в каждом методе, где возможны разные формы ввода/вывода (типа метода ToString) указывать требуемую культуру. Смотрите CultureInfo.
Используйте анализатор кода в старших версиях Visual Studio или, если используете Express версию — бесплатный FxCop. Он выдаст вам все места, где возможны проблемы с культурой и форматами. Смотрите IFormatProvider.
Насколько я понял, вам вне зависимости от настроек ОС нужно использовать везде точку вместо запятой. Тогда при старте приложения в текущем потоке выставляйте культуру.
В случае, если у вас идет парсинг значений в отдельных потоках, в них тоже придется передавать текущую культуру.
Насколько я понял, вам вне зависимости от настроек ОС нужно использовать везде точку вместо запятой. Тогда при старте приложения в текущем потоке выставляйте культуру.
В случае, если у вас идет парсинг значений в отдельных потоках, в них тоже придется передавать текущую культуру.
Нет, как раз если вы укажите в программе культуру самостоятельно, то настройки Windows будут игнорироваться. А по умолчанию культура из настроек Windows и берется и для разных локалей — будут разные разделители целой и дробной части, также могут быть разделители между тысячами и т.п.
Нет, как раз если вы укажите в программе культуру самостоятельно, то настройки Windows будут игнорироваться. А по умолчанию культура из настроек Windows и берется и для разных локалей — будут разные разделители целой и дробной части, также могут быть разделители между тысячами и т.п.
Я имею на одном ПК RU W7, на этом ПК я поменял разделитель по умолчанию с , на .
Программа этого изменения автоматом не увидела и работала некорректно.
Я думаю, мне надо при запуске приложения считывать настройки Windows и в связи с этим, программно изменять культуру самого приложения.
Не надо руками выставлять культуру при запуске. Это поведение .NET по умолчанию. Если культура не выставляется — значит кто-то специально написал код для этого. Найдите его, и спросите зачем он это сделал 🙂 Т.е. «не работать» может всего в нескольких случаях:
1. В программе уже есть код, в котором вручную вписана культура, но не во всех местах. Поэтому разделители используются разные.
2. Где-то в коде числа разбираются вручную (или разбираются из строки вручную, а строку конвертируются через ToString c системной культурой).
Какого вида у вас «ошибки»? Исключения, ошибки рассчетов, неправильно разбираемый ввод от пользователей? Локализуйте конкретное место в отладчике, и чините его.
Не надо руками выставлять культуру при запуске. Это поведение .NET по умолчанию. Если культура не выставляется — значит кто-то специально написал код для этого. Найдите его, и спросите зачем он это сделал 🙂 Т.е. «не работать» может всего в нескольких случаях:
1. В программе уже есть код, в котором вручную вписана культура, но не во всех местах. Поэтому разделители используются разные.
2. Где-то в коде числа разбираются вручную (или разбираются из строки вручную, а строку конвертируются через ToString c системной культурой).
Какого вида у вас «ошибки»? Исключения, ошибки рассчетов, неправильно разбираемый ввод от пользователей? Локализуйте конкретное место в отладчике, и чините его.
Да, у меня много преобразований из строки в числа и обратно, так же используя ToString.
Ошибки вида: не верное отображение числовых данных в datagridview, иногда просто пропадают столбцы из таблицы.