![]() |
|
||||||||||
|
|||||
|
Во флеше есть три вида округления, при этом математически корректного ни одного =). Ведь округление в математике идет не обязательно целочисленно. Округление в математике производят либо до порядка, определенного точностью метода или аппаратуры. В данном случае очевидно использование стандартных флешовых округлялок. Но при расчетах требования к округлению несколько иные: количество значащих цифр, независимо от положения запятой или порядка величины.
То есть при округлении до трех значащих цифр: 90034.2 -> 90000 1.0354 -> 1.04 0.0043142 -> 0.00431 Сейчас пришло на ум лишь вот такое кандовое решение private function threeAP(num:Number):Number
{
if(num == 0 || !num) return 0;
var k:Number;
var numfin:Number;
if( Math.abs(num) >=1) k = 10; else k = 0.1;
for (var i:Number = 1; ; i++)
{
var numtemp:Number = Math.abs(num)/Math.pow(k,i);
if( k==10 && numtemp < 1 )
{
numfin=Math.round(numtemp*Math.pow(k,3))*Math.pow(k,i-3);
break;
}
if( k==0.1 && numtemp >= 1 )
{
numfin=Math.round(numtemp*Math.pow(10,2))/Math.pow(10,i+2);
break;
}
}
return numfin;
}
спасибо
__________________
Глупости какие-то говорите. |
![]() |
Часовой пояс GMT +4, время: 07:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|