![]() |
|
||||||||||
|
|||||
|
товарищи! подскажите универсальный способ подсчета:
чтобы получить ответ 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 |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Проводи целочисленные операции, а потом дели на 100.
|
|
|||||
|
дело в том, что цифры вводятся пользователем
![]() т.е. нужно будет определять, сколько знаков после запятой. потом соответственно умножать на 10 (+ кол-во нулей - это количество знаков) перед округлением, а потом обратно?
__________________
of all the things I've loved and lost... I miss my mind the most. - Ozzy Ozbourne Последний раз редактировалось BeaviZ; 21.03.2007 в 14:46. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Ну да. Можно на заведомо бОльшее число знаков умножить (которое пользователь не сможет ввести) и с ним работать.
|
|
|||||
|
Негуру
администратор
Регистрация: 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. |
|
|||||
|
Иех, жаль способа лучше нет....
Но, решение найдено. Спасибо.
__________________
of all the things I've loved and lost... I miss my mind the most. - Ozzy Ozbourne |
|
|||||
|
Et cetera
Регистрация: 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. |
|
|
« Предыдущая тема | Следующая тема » |
|
|