Просмотр полной версии : операция вычетания во флеше
товарищи! подскажите универсальный способ подсчета:
trace(20.15 - 20);
чтобы получить ответ 0.15.
спасиба!
ЗЫ. из факов и поисков нашёл только:
http://www.flasher.ru/forum/showthread.php?t=59237&page=3
http://flasher.ru/forum/showthread.php?t=79170
но ответа там нет.
Проводи целочисленные операции, а потом дели на 100.
дело в том, что цифры вводятся пользователем :(
т.е. нужно будет определять, сколько знаков после запятой.
потом соответственно умножать на 10 (+ кол-во нулей - это количество знаков) перед округлением, а потом обратно?
Ну да. Можно на заведомо бОльшее число знаков умножить (которое пользователь не сможет ввести) и с ним работать.
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.
Иех, жаль способа лучше нет....
Но, решение найдено. Спасибо.
Проблему можно решить иначе. Ведь пользователь вводит точку, а это все строка. Что мешает работать без точки, потом её привинтить?
Как-то так:
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);
Доработать напильником только надо.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.