如何将指数转换为固定十进制。示例:2.5e12 ,0.12323e-11 等
2 回答
在 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 版本。第一个和最后一个也将格式化特定于用户区域设置的数字(在适当的情况下使用逗号而不是句点等)。
以下是文档的链接:
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("-","");
// 它正在删除 start 的 zeors
finalNum=Number(splitFixedNum[0]).toString();
// 是否为十进制
if(finalNum.toString().indexOf(".")>=0)
{
isDecimal=true;
}
else
isDecimal=false;
/// 指数为零
if(exponentNum==0)
return finalNum;
// 如果 num 是十进制 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;
//如果exp diff大于零连接零
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 小于零,则在数字之间移动 .(dot)
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();
}