Как преобразовать экспоненту в фиксированную десятичную. пример: 2.5e12, 0.12323e-11 и т.д.Как преобразовать номер экспоненциального в фиксированное десятичное число в Adobe Flex3
ответ
public function formatIntoFixedValue(value:Object):Object
{
var isNegativeNum:Boolean ;
var isNegativeExp:Boolean;
var isDecimal:Boolean;
var splitNums:Array;
var splitFixedNum:Array;
var leftDecPlaceCount:Number=0;
var rightDecPlaceCount:Number=0;
var exponentNum=0;
var finalNum:String;
var valueNum:Number=Number(value);
var valueStr:String = valueNum.toString();
// не экспоненту вернуть
if(valueStr.indexOf("e")<0)
return valueStr;
if(valueNum<0)
// Число отрицателен или не
isNegativeNum=true;
else
isNegativeNum=false;
splitFixedNum= valueStr.split("e");
if(Number(splitFixedNum[1])<0)
// экспонент является отрицательным или нет
isNegativeExp=true;
else
isNegativeExp=false;
exponentNum=Math.abs(Number(splitFixedNum[1]));//-7
// удаление пространства
splitFixedNum [0] = StringUtil.trimArrayElements (splitFixedNum [0], "");// удаление минус знак из старт если есть. splitFixedNum [0] = splitFixedNum [0] .toString(). Replace ("-", "");
// это удаление zeors старта
finalNum=Number(splitFixedNum[0]).toString();
// десятичный или не
/// показатель равен нулю
if(exponentNum==0)
return finalNum;
// если Num десятичный , если (isDecimal) { вар expDiff: Кол-во;
splitNums= String(splitFixedNum[0]).split(".");
splitNums[0]=Number(splitNums[0]).toString();
if(splitNums[0]!="0")
{
finalNum=splitNums[0].toString().concat(splitNums[1]);
leftDecPlaceCount=splitNums[0].toString().length;
}
else
{
finalNum=splitNums[1];
leftDecPlaceCount=0;
}
rightDecPlaceCount=splitNums[1].toString().length;
if(isNegativeExp)
expDiff=exponentNum-leftDecPlaceCount;
else
expDiff=exponentNum-rightDecPlaceCount;
// Если ехр разность больше нуля Соединить нули
if(expDiff>0)
{
var zeros:String="";
for(var i:Number=0;i<expDiff;i++)
zeros+="0";
if(isNegativeExp)
finalNum="0."+zeros+finalNum;
else
finalNum= finalNum+zeros;
}
// Если ехр разность меньше нуля, чем двигаться. (Точка) между числом
else if(expDiff<0)
{
var s:String;
expDiff= Math.abs(expDiff);
if(isNegativeExp)
s =finalNum.substr(0,expDiff)+"."+finalNum.substr(expDiff,finalNum.length);
else
s =finalNum.substr(0,(leftDecPlaceCount+rightDecPlaceCount)-expDiff)+"."+finalNum.substr((leftDecPlaceCount+rightDecPlaceCount)-expDiff,finalNum.length);
finalNum=s;
}
else
{
if(isNegativeExp)
finalNum= "0."+finalNum;
}
}
else
{
var zeros:String="";
for(var i:Number=0;i<exponentNum-finalNum.length;i++)
zeros+="0";
if(isNegativeExp)
finalNum="0."+zeros+finalNum;
else
finalNum= finalNum+zeros;
}
if(isNegativeNum)
finalNum ="-"+ finalNum;
return finalNum.toString();
}
В Flash/Flex вы можете использовать один из классов NumberFormatter
. Ниже приведен пример использования Flex 3 (MX) NumberFormatter
. Взгляните на документы для API, которые предлагают каждый, они немного отличаются друг от друга.
var n:Number = 3 * .0000000001;
trace(n); // 3e-10
var f:NumberFormatter = new NumberFormatter();
f.precision=10;
trace(f.format(n)); // 0.0000000003
Есть 3 NumberFormatter классы, один для чистого Flash (не-Flex), один для Flex 3, и версия Flex 4. Первый и последний будут также форматировать номер, специфичный для локали пользователя (используйте запятую вместо периодов, где это необходимо, и т. Д.).
Ниже приведены ссылки на документацию:
Это решение неприемлемо. – AsadYarKhan
@AsadYarKhan Привет, я смущен :) Вы приняли это как ответ, но это неприемлемо? Вы можете указать, почему он не соответствует вашим потребностям, и добавить это к вашему вопросу, если это важно. Честно говоря, ваш вопрос расплывчатый и не указывает никаких требований. Кроме того, это стандартные классы форматирования номера из Adobe. Приятно, что у вас есть более благоприятное решение, но другие должны знать, что уже доступно. Вы можете не согласиться с этим и принять свой ответ, кстати, если вы это сделаете, пожалуйста, уточните, какие различия существуют, чтобы другие могли извлечь выгоду. –
и ошибка функции to.Fixed() с большим десятичным значением. :( – AsadYarKhan
Проверено моей QA команда работает отлично в заявке. – AsadYarKhan