Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.03.2007, 14:24
BeaviZ вне форума Посмотреть профиль Отправить личное сообщение для BeaviZ Посетить домашнюю страницу BeaviZ Найти все сообщения от BeaviZ
  № 1  
Ответить с цитированием
BeaviZ
 
Аватар для BeaviZ

Регистрация: Jan 2000
Адрес: Dubna
Сообщений: 609
Отправить сообщение для BeaviZ с помощью ICQ
По умолчанию операция вычетания во флеше

товарищи! подскажите универсальный способ подсчета:

Код:
trace(20.15 - 20);
чтобы получить ответ 0.15.
спасиба!


ЗЫ. из факов и поисков нашёл только:
http://www.flasher.ru/forum/showthre...t=59237&page=3
http://flasher.ru/forum/showthread.php?t=79170

но ответа там нет.
__________________
of all the things I've loved and lost...
I miss my mind the most.
- Ozzy Ozbourne

Старый 21.03.2007, 14:42
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Проводи целочисленные операции, а потом дели на 100.

Старый 21.03.2007, 14:44
BeaviZ вне форума Посмотреть профиль Отправить личное сообщение для BeaviZ Посетить домашнюю страницу BeaviZ Найти все сообщения от BeaviZ
  № 3  
Ответить с цитированием
BeaviZ
 
Аватар для BeaviZ

Регистрация: Jan 2000
Адрес: Dubna
Сообщений: 609
Отправить сообщение для BeaviZ с помощью ICQ
дело в том, что цифры вводятся пользователем

т.е. нужно будет определять, сколько знаков после запятой.
потом соответственно умножать на 10 (+ кол-во нулей - это количество знаков) перед округлением, а потом обратно?
__________________
of all the things I've loved and lost...
I miss my mind the most.
- Ozzy Ozbourne


Последний раз редактировалось BeaviZ; 21.03.2007 в 14:46.
Старый 21.03.2007, 14:55
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Ну да. Можно на заведомо бОльшее число знаков умножить (которое пользователь не сможет ввести) и с ним работать.

Старый 21.03.2007, 15:03
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Код:
function x (a:Number, b:Number):Number {
	var m:Number = Math.max (String (a).split (".")[1].length, String (a).split (".")[1].length) + 1;
	if (isNaN (m)) {
		m = 1;
	}
	var s:Number = Math.pow (10, m);
	return (a * s - b * s) / s;
}
w = 20.15 - 20;
trace (w);
trace (x (w, 0.04));
trace (x (20.15, 20));
trace (x (.15, 0));
trace (x (2, 1));
Обратите внимание на результат синего трейса
Я так понимаю, все равно нужно округлять, даже после умножения числа на 10 в степени N.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 21.03.2007, 15:04
BeaviZ вне форума Посмотреть профиль Отправить личное сообщение для BeaviZ Посетить домашнюю страницу BeaviZ Найти все сообщения от BeaviZ
  № 6  
Ответить с цитированием
BeaviZ
 
Аватар для BeaviZ

Регистрация: Jan 2000
Адрес: Dubna
Сообщений: 609
Отправить сообщение для BeaviZ с помощью ICQ
Иех, жаль способа лучше нет....
Но, решение найдено. Спасибо.
__________________
of all the things I've loved and lost...
I miss my mind the most.
- Ozzy Ozbourne

Старый 21.03.2007, 15:13
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Проблему можно решить иначе. Ведь пользователь вводит точку, а это все строка. Что мешает работать без точки, потом её привинтить?

Как-то так:

Код:
a = '3.15';
b = '0.1';
dota = a.indexOf('.') != -1 ? (a.length-a.lastIndexOf('.')-1) : 0;
dotb = b.indexOf('.') != -1 ? (b.length-b.lastIndexOf('.')-1) : 0;
afterdot = 0;
while (dota<dotb) {
	a += '0';
	afterdot = dotb;
	dota++;
}
while (dotb<dota) {
	b += '0';
	afterdot = dota;
	dotb++;
}
afterdot = dota==dotb ? dota : afterdot;
while (a.charAt(0)=='0') {
	a = a.substr(1);
}
while (b.charAt(0)=='0') {
	b = b.substr(1);
}
na = Number(a.split('.').join(''));
nb = Number(b.split('.').join(''));
nc = na-nb;
c = String(nc);
if (dota != 0 || dotb != 0) {
	if (c.length<=afterdot) {
		while (c.length<afterdot) {
			c = '0'+c;
		}
		c = '0.'+c;
	} else {
		c = c.substr(0, c.length-afterdot)+'.'+c.substr(-afterdot);
	}
	while (c.charAt(c.length-1)=='0') {
		c = c.substr(0,c.length-2);
	}
	if (c.charAt(c.length-1)=='.') {
		c = c.substr(0,c.length-2);
	}
}
trace(c);
Доработать напильником только надо.


Последний раз редактировалось etc; 21.03.2007 в 15:46.
Создать новую тему Ответ Часовой пояс GMT +4, время: 23:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 23:32.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.