指数を固定小数に変換する方法。例:2.5e12、0.12323e-11など
2 に答える
NumberFormatter
Flash / Flexでは、クラスの1つを使用できます。以下は、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
NumberFormatterクラスには3つあり、1つは純粋なFlash(非Flex)用、もう1つはFlex 3用、およびFlex4バージョン用です。最初と最後のものは、ユーザーのロケールに固有の数値もフォーマットします(必要に応じて、ピリオドの代わりにコンマを使用しますなど)。
ドキュメントへのリンクは次のとおりです。
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( "-"、 "");
//開始の熱狂者を削除しています
finalNum=Number(splitFixedNum[0]).toString();
//10進数かどうか
if(finalNum.toString().indexOf(".")>=0)
{
isDecimal=true;
}
else
isDecimal=false;
///指数はゼロです
if(exponentNum==0)
return finalNum;
// numが10進数の場合if(isDecimal){var expDiff:Number;
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;
//expdiffがゼロより大きい場合はゼロを連結します
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;
}
// exp diffがゼロ未満の場合、数値間で。(ドット)を移動します
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();
}