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