![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]() ![]()
Сообщение
#1
|
|
Новичок ![]() Группа: Новичок Сообщений: 3 Регистрация: 16.06.2012 Пользователь №: 11036 ![]() |
Прога на ActionScript 2.0
Казалось бы, простейшая программа. Вроде бы всё дописано правильно. Не будем брать в расчёт точность вычисления математических функций cos, sin и пр. Возникает единственная ПРОБЛЕМА С ТОЧКОЙ! Срабатывает по непонятной схеме. Вот пример: 1 + 8.1 = 9.1 (всё ОК) 8.1 + 1 = 8.11 (WTF?) 0.1 + 0.1 = 0.101 и т.д. Т.е. при введении сначала дробного числа, а потом любого другого не работает. Что с этим делать, подскажите пожалуйста! Мне очень важно как можно скорее довести алгоритм до ума и использовать его в ДИПЛОМЕ! ![]() Код // Объявляем переменные var tablo = 0; var num = 0; var tochka = true; var Numbers = 0; var n = 1; var Str = ""; var memory = null; var operation = null; // Отключаем кнопку "равно" But_RAVNO.enabled = false; // Код для кнопки очистки экрана But_CLEAR.onPress = function() { tablo = 0; num = 0; tochka = true; Numbers = 0; n = 1; Str = ""; But_RAVNO.enabled = false; block2(true); block(true); block3(true); }; // Обработчики нажатия кнопок с цифрами But_0.onPress = function() { num = 0; MyAdd(); }; But_1.onPress = function() { num = 1; MyAdd(); }; But_2.onPress = function() { num = 2; MyAdd(); }; But_3.onPress = function() { num = 3; MyAdd(); }; But_4.onPress = function() { num = 4; MyAdd(); }; But_5.onPress = function() { num = 5; MyAdd(); }; But_6.onPress = function() { num = 6; MyAdd(); }; But_7.onPress = function() { num = 7; MyAdd(); }; But_8.onPress = function() { num = 8; MyAdd(); }; But_9.onPress = function() { num = 9; MyAdd(); }; // Функция, отвечающая за добавление десятичной точки But_TOCHKA.onPress = function() { if (tochka) { tochka = false; Str += "."; } }; // Код для кнопки изменения знака But_ZNAK.onPress = function() { if (Str != 0 && Str != "") { Numbers *= -1; if (Str.substring(0, 1) != "-") { Str = "-"+Str; } else { Str = Str.substring(1); } if (Str.length<17) { tablo = Str; } else { tablo = Numbers; } } }; // Функция, формирующая по нажатиям кнопок операнды function MyAdd() { if (tochka) { Numbers = Numbers*10+num; } else { Numbers += num/Math.pow(10, n); n++; } if (Str != 0) { Str = Str+num; } else { Str = String(num); } if (Str.length<17) { tablo = Str; } else { tablo = Numbers; } } // Обработчики события нажатия кнопок арифметических операций But_PLUS.onPress = function() { calc("plus"); }; But_MINUS.onPress = function() { calc("minus"); }; But_UMN.onPress = function() { calc("umn"); }; But_DEL.onPress = function() { calc("del"); }; But_STEPEN.onPress = function() { calc("stepen"); }; // Функция, вызываемая при нажатии кнопки арифметической операции function calc(operat) { memory = Numbers; Numbers = 0; Str = ""; operation = operat; block(false); But_RAVNO.enabled = true; block2(true); block3(false); } // Код, производящий вычисления при нажатии кнопки "равно" But_RAVNO.onPress = function() { var result = null; if (operation == "plus") { result = memory+Numbers; } if (operation == "minus") { result = memory-Numbers; } if (operation == "umn") { result = memory*Numbers; } if (operation == "del") { result = memory/Numbers; } if (operation == "stepen") { result = Math.pow(memory, Numbers); } Numbers = result; Str = result; tablo = result; block(true); block2(false); block3(true); But_ravno.enabled = false; }; // Функция, включающая или выключающая кнопки операций function block(par) { But_PLUS.enabled = par; But_UMN.enabled = par; But_MINUS.enabled = par; But_DEL.enabled = par; But_STEPEN.enabled = par; } // Функция, отвечающая за активность кнопок с цифрами function block2(par) { for (var i = 0; i<=9; i++) { eval("But_"+i).enabled = par; } But_TOCHKA.enabled = par; But_E.enabled = par; But_PI.enabled = par; } // Обработчики нажатия кнопок математических функций But_SIN.onPress = function() { func("sin"); }; But_COS.onRelease = function() { func("cos"); }; But_TAN.onPress = function() { func("tan"); }; But_LN.onPress = function() { func("ln"); }; But_ASIN.onPress = function() { func("asin"); }; But_ACOS.onPress = function() { func("acos"); }; But_SQRT.onPress = function() { func("sqrt"); }; But_ROUN.onPress = function() { func("roun"); }; // Функция, отвечающая за вычисления при нажатии кнопки математической функции function func(par) { var result = null; if (par == "sin") { result = Math.sin(Numbers/180*Math.PI); } if (par == "cos") { result = Math.cos(Numbers/180*Math.PI); } if (par == "tan") { result = Math.tan(Numbers/180*Math.PI); } if (par == "ln") { result = Math.log(Numbers); } if (par == "asin") { result = Math.asin(Numbers)/Math.PI*180; } if (par == "acos") { result = Math.acos(Numbers)/Math.PI*180; } if (par == "sqrt") { result = Math.sqrt(Numbers); } if (par == "roun") { result = Math.round(Numbers); } tablo = result; Numbers = result; Str = String(result); } // Функция, отвечающая за активность кнопок математических функций function block3(par) { But_SIN.enabled = par; But_COS.enabled = par; But_TAN.enabled = par; But_LN.enabled = par; But_ASIN.enabled = par; But_ACOS.enabled = par; But_SQRT.enabled = par; But_ROUN.enabled = par; } // Обработчики нажатия кнопок математических констант But_PI.onPress = function() { Numbers = Math.PI; Str = String(Math.PI); block2(false); tablo = Math.PI; }; But_E.onPress = function() { Numbers = Math.E; Str = String(Math.E); block2(false); tablo = Math.E; }; Исходник тут http://rghost.ru/38702893 |
|
|
![]()
Сообщение
#2
|
|
Ветеран конференции ![]() ![]() ![]() ![]() ![]() Группа: Flash Zone Team Сообщений: 4739 Регистрация: 10.03.2005 Из: Киев Пользователь №: 5 ![]() |
Цитата Т.е. при введении сначала дробного числа, а потом любого другого не работает. Что с этим делать, подскажите пожалуйста! VINegative Это у тебя в коде срабатывает "преобразование операции". Т.е. после дробного числа вместо добавления срабатывает конкатенация. Сколько я создавал калькуляторов, такого у меня не случалось. Так что улучшать свой код ![]() Помимо операции добавления более нигде таких глюков нет? В операции удаления и т.д. (обязательно детально протестируй все операции). Если нет, то значит только код добавления улучшай. -------------------- Best wishes & regards,
MustLive Администратор сайта http://mlfun.org.ua |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 19.01.2013 - 01:09 |