Форматиране на textbox...
Автор |
|
power_mПет, 25.02.11, 19:23 |
Здравейте ! Искам да попитам как да форматирам определен текстбокс, така че, като въвеждам в него десетично число например 2,20 лв и в друг текстбокс въведа цяло число , като сумирам въведените числа да не генерира грешка .... Благодаря! | | phrozencrewПет, 25.02.11, 19:34 |
Пробвай с точка, а не с запетайка. | | power_mПет, 25.02.11, 20:49 | RE: Форматиране на textbox...
” Пробвай с точка, а не с запетайка. „ Пробвах, не става ! | | power_mПет, 25.02.11, 22:18 | RE: RE: Форматиране на textbox...
” Предполагам, че искаш нещо такова:
Ето сорса със коментари : Private Sub TextBox1_Change()
Sabirane
End Sub
Private Sub TextBox2_Change()
Sabirane
End Sub
Sub Sabirane()
'Проверяваме да ли се използва запетая или точка, за да представим така и крайният резултат
If InStr(1, TextBox1.Text, ",") > 0 Or InStr(1, TextBox2.Text, ",") > 0 Then FlagZapetaika = 1 Else FlagZapetaika = 0
'Заместваме запетая с точка (ако има такава) и извличаме само числото с функцията Val
ParvoChislo = Val(Replace(TextBox1.Text, ",", "."))
VtoroChislo = Val(Replace(TextBox2.Text, ",", "."))
'Събираме двете числа и добавяме формата за "лв"
Label3.Caption = ParvoChislo + VtoroChislo & " лв"
'Заместваме точката със запетайка, ако е била използвана запетайка
If FlagZapetaika = 1 Then Label3.Caption = Replace(Label3.Caption, ".", ",")
End Sub |
Ето и работещо примерче: Primer.xls „ Сърдечно благодаря DREVEN !!! | | phrozencrewПет, 25.02.11, 22:20 | RE: RE: Форматиране на textbox...
За JavaScript ли става въпрос или за VBA? PS: Разбрах | | phrozencrewПет, 25.02.11, 22:36 | RE: RE: RE: RE: Форматиране на textbox...
” Не съм 100 % сигурен, но мисля,че на всички езици математическите операции са с точка. „
Именно! А той е пробвал и не е станало с точката, което е странното. Но не разбрах за собствена програма ли става въпрос или за някаква страница, щото нали раздела е "Програмиране и web-дизайн". | | anonymousСъб, 26.02.11, 03:40 | RE: RE: RE: RE: Форматиране на textbox...
” Не съм 100 % сигурен, но мисля,че на всички езици математическите операции са с точка. „ С право не си на 100% сигурен. От регионалните настройки (без значение на операционната система) може да си настроиш разделителя (и не само) за дробно число да е ако искаш '@'(или почти каквото искаш да е). Интерпретаторите на различните програмни езици и скриптови такива се съобразяват с твоите настройки за региона :) редактиран от anonymous на 26.02.11 03:50 редактиран от anonymous на 26.02.11 04:02 | | anonymousСъб, 26.02.11, 09:27 |
Става въпрос при въвеждане в текстбокс, а не в сорса. В сорса при теб ако евентуално успееш да го сложиш там ще се интерпретира като точка, но друг, с други регионални натройки ще гръмне. | | anonymousСъб, 26.02.11, 18:51 | RE: RE: Форматиране на textbox...
” Е нали точно за това идеше реч. Математическите операции компютъра ги извършва в резултат на формулите надробени в сорса. В текстовите полета ти дори можеш да пишеш цифрите с думи, но после трябва да сложиш такъв сорс, който да докара нещата до число и ако то е десетично то разделителят трябва да бъде точка. Иначе няма да се получи математика. А регионалните настройки променят само визуализацията ( изгледа). Можеш да си сигурен, че докарал ли си нещата до цифри с разделител точка, компютърът ще извърши математическите операции независимо от регионалните ти настройки, а след това ще ти визуализира нещата според регионалните настройки. „ Тука си прав. Но в нашите отговори се водим по въпроса на този, който е отворил темата. Човека казва, че като ползва за разделител точка или запетая при въвеждане на дробно число в textbox и последващ опит да събере това число с друго програмата му "гърми". Сега да го представим по- нагледно това: Потребител въвежда в textbox -a числото 2.3, което се присвоява на променливата 'а'. В програмата му на променливата 'б' е присвоено числото 3.2. Разбира се променливата 'с' съдържа сбора от променливите 'а' и 'б'. Тоест: с=а+б Тоест: с=2.3+3.2 Очаква се 'с' да има стойност 5.5 Едно малко отклонение: На всички ни е ясно като програмисти, че разделителя на дробните числа е точка. Да не изпадам в подробности накратко се използва американската система за изобразяване на числа. Това, че в някои програми, полета за въвеждане или каквото там може да въвеждаш дробно число с разделител различно от точка си е функция/екстра на програмата. Когато дадена програма няма това свойство то се поема от системата(онея регионални настройки). Така. До дука какво имаме? Имаме: 1. В кода всички твърди числа (тези които не се въвеждат от потребителя) трябва да са с десетичен разделител точка (иначе програмата ще си 'гърми'). 2. В регионалните настройки на машината на потребителя за такъв разделител може да има почти всичко(както казахме дори и '@'). 3. Каквото и да има в регионалните настройки на потребителя нас не ни притеснява, понеже системата ще го подаде към програмата като точка (имам предвид разделителя за дробни числа) И така. Какво ди направил ти? Събрал си две дробни числа. Извеждаш сбора от тях. В регионалните ти е дадено разделителя да е '@'. Сбора ти е 5@3 До тука няма грешка. Сега преработи програмата си променливата ти 'а' да иска въвеждане от потребителя на дробно число. Събери го (програмата го събира) с друго дробно число и си изведи сбора. И ако си оставил за разделител символа '@' в регионалните си докато не въведеш числото с този разделител програмата ще ти гърми. а = /* присвоява стойността въведена от потребителя в текстбокса */
б = а+3.2
извеждаме б
ако а е 2.3 то резултата ще е 5.5 |
Това няма да гърми, ако потребителя е въвел 2@3 Още едно малко отклонение: Няма нужда да се опитваш в кода си да слагаш различен разделител от точката. Ако толкова искаш в сурса ти '@' да играе за разделител най лесно е да си дефинираш това. Предполагам, че не искаш това, а просто в опита си да разбереш подмяната на разделител ти е хрумнало. И така. За да обърна внимание на регионалните настройки в предния си постинг е било понеже на отворилия темата кода му е верен, но явно системата не попада на точния формат, който и трябва за да работи (както каза човека ни точка, ни запетая). П.С.: Това горното, сега ми хрумна, можеше да го обясня и като ви разкажа една история. Едно време в университета учехме информатика. Информатиката представляваше да може да работим с разни програми. Една от програмите бе и Ексел. Та на изпитите много често асистентите променяха някои неща от регионалните настройки. Една от тези промени бе и именно този разделител за дробни числа и така когато имахме формула от от рода на И в клетките A1 и B1 се съдържаха дробни числа (примерно оборота на някой магазин) формулата си гърмеше със съобщение за грешка. редактиран от anonymous на 26.02.11 19:01 редактиран от anonymous на 26.02.11 19:03 редактиран от anonymous на 26.02.11 19:05 | | phrozencrewСъб, 26.02.11, 19:38 |
Съгласявам се напълно с lotsofsex. В Inputbox-a каквото и да навреш ще работи, стига да е по регионалните настройки. За това и би било интересно каква точно грешка се е случила с кода на power_m, която е останала като грешка и след заменянето на запетайката с точка? ПС: Тая тема е изключително проблематична при Window$ машините, инсталирани на лаптопи, които нямат NumLock!!!! Просто е някакъв ад! | | power_mВто, 01.03.11, 19:03 | RE: RE: Форматиране на textbox...
Здрвейте ! Любопитно ми е по какъв начин да присвоя стойност в която да се съхраняват и сумират въведените стойности в " parvochislo", защо поставям този проблем ... ? Защото аз съзададох такава променлива в която се съхраняват въведените стойности .... но, всеки път когато въвеждам новата стойност в "parvochislo" променливата приема същата стойност а не се сумират, примерно : Dim a as Integer dim n as integer a=parvochislo -> 7 (5) n= a +a ->7 (5 suma = n ->7 (12) .... | | phrozencrewВто, 01.03.11, 20:56 | RE: RE: Форматиране на textbox...
” Какво точно имаш предвид, за лаптопите? „
Липсата на NumLock клавиатура ли?! Пробвай да въведеш в неформатирана клетка десетично число. Естествено ще използваш запетайката от стандартната клавиатура, ако регионалните настройки са ти такива, че запетайката е десетичен знак. Excel-а ще може да обработи математически това поле. Но го приема за текстово!!! И не дай си Боже да пренесеш файла на друг комп, който е с друга регионална настройка с точка за десетичен разделител . Получава се такова мазало, че не е истина! Полетата си седят текстови и не можеш да правиш никакви аритметични операции с тях. Едва ли производителите на лаптопи ще бъдат задължени да вкарват NumLock клавиатури, но тая безсмислица беше редно да е оправена отдавна. Все пак хората с лаптопи също правят бизнес! Още един много досаден и мегагаден бъг съм забелязал в Excel, който продължава да виси със страшна сила. Ако инсталираш офиса на друг език, примерно немски. И решеш там да използваш вградените допълнителни функции, като конвертиране на десетични числа в бинарни - функцията е "=Dez2Bin" (абсолютно примерно). И ако отвориш тоя файл на комп, при който офиса е на английски, тогава функцията не се конвертира до Dec2Bin, ами си седи с "z". С доста функции е така. Отвратително е! Чудя се защо М$ съсипват по тоя грозен начин една от най-добрите си програми Excel!!! Тъпо, та чак вдлъбнато! И е така от години! | | phrozencrewВто, 01.03.11, 22:44 | RE: Форматиране на textbox...
” По отношение на десетична запетая или точка, Майкрософт са се погрижили да може да се сменят бе да се пипат регионалните настройки на компютъра. С други думи потребителят може да избере сам дали да ползва регионалните настройки или не. Промяната се извършва с слагане или махане на една клявка в Tools=>Option=>International За по нагледно:
„
Утре ще го пробвам това, но дълбоко се съмнявам, че ще ми поправи документите, създавани на лаптоп. Работя с документи с 4 различни регионални настройки от различните офиси на фирмата - немски, австрийски, малайзиски и китайски. Определено ще е много трудно да се накарат хилядите служители, да си форматират като числови клетките, с които извършват математически операции, а още по-малко да си променят настройките на Excel-a. Много по-лесно би било М$ да си оправят офиса с един ъпдейт. | | Коментар |