关于 float 类型数据的问题 一个 float 类型的变量,当数据量很大时(如:11111111111111111111111.0),它就会以科学计数法来显示...怎么才能让它正常显示呢??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那就不能用float了吧:精度有限! 请用java.math.BigDecimalBigDecimal bd=new BigDecimal("11111111111111111111111.0"); JDK1.5里面有一个Formatter类可以实现你需要的功能,另外也可以用String.format()方法,后者也是用Formatter来实现格式化输出的,演示代码如下:double d = 11231242312323242d;String ret = String.format(Locale.US, "d = %20f", d);System.out.println(ret); ls注意"当数据量很大时"!即使double也是允许最多20位的精度(记得好象是16~17位),而楼主给出的例子已经有23位了 float d = 11111111111111111111111.0;System.out.println("d = " + new java.text.DecimalFormat("0.00").format( d ) ); to:Chinajash() 那个方法好像会保留很多位的小数,我只想要两位或一位,怎么解决?to:hdhmail2000(禅剑飞雪) 打印出来的结果好像不正确哦...to:malligator(不能再整天泡在CSDN里了!) 你的方法好像不光是数据不正确,连小数点都没了...救命啊 !~~~~~~~~~~~~~~~~~~~~~~~ 搂主,把float换成doubledouble d = 11111111111111111111111.0;System.out.println("d = " + new java.text.DecimalFormat("0.00").format( d ) ); 当然数字很大的时候有精度损失的要想不损失的话,可能要自己写加减乘除法的运算了下面是我写的计算任意整数阶乘的算法,里面有大数加法,乘法的算法,你参考下了/** * 文件Test.java * @author hdhmail2000(禅剑飞雪) * */public class Test {/** * 大数加法 */public String add(String a,String b){String big=a.length()>b.length()?a:b;String small=a.length()>b.length()?b:a;int dot=0; //进位StringBuffer result=new StringBuffer("");char[] cBig=((new StringBuffer(big)).reverse()).toString().toCharArray();char[] cSmall=((new StringBuffer(small)).reverse()).toString().toCharArray();/* * 计算最小的一个与大的一个小的部分的和 */for(int i=0;i<cSmall.length;i++){int temp=Integer.parseInt(String.valueOf(cBig[i]))+Integer.parseInt(String.valueOf(cSmall[i]))+dot;dot=temp/10;result.append(temp%10);}/* * 对大的一个进行计算 */for(int j=cSmall.length;j<cBig.length;j++){int temp2=Integer.parseInt(String.valueOf(cBig[j]))+dot;dot=temp2/10;result.append(temp2);}/* * 结果的位数超过最大的时候进行进位 */if(dot>0){result.append(dot);}result=result.reverse();return result.toString();}/** * 大数乘法 */public String multiply(String a,String b){char[] cA=((new StringBuffer(a)).reverse()).toString().toCharArray();char[] cB=((new StringBuffer(b)).reverse()).toString().toCharArray();String result="0";for(int i=0;i<cA.length;i++){StringBuffer tempSingle=new StringBuffer("");/* * 一个数的每一位数乘以另外一个数 */int dot=0; //进位for(int j=0;j<cB.length;j++){int temp=Integer.parseInt(String.valueOf(cA[i]))*Integer.parseInt(String.valueOf(cB[j]))+dot;tempSingle.append(temp%10);dot=temp/10;}/* * 处理进位 */if(dot>0){tempSingle.append(dot);}tempSingle=tempSingle.reverse();for(int k=0;k<i;k++){tempSingle.append("0");}/* * 把每一个数乘以另一个数的结果调用加法方法相加起来 */result=add(result,tempSingle.toString());}return result;}/** * 求n的阶乘 */public String factor(String a){String n="1";for(int i=1;i<=Integer.parseInt(a);i++){n=multiply(n,String.valueOf(i));}return n;}/** * 主函数 */public static void main(String[] args) {Test test=new Test();System.out.println(test.factor("100"));}} java线程自动中止的问题 使用ArrayList时遇到问题, 别笑我.请问写JAVA程序是用记事本吗? 如何读取音频文件? 怎样读取80几兆的文件 请大家帮忙指问题。编译能过,但执行结果不对。 100分求助-关于Jbuilder6.0中,菜单的制作! 请问java 高手,用java调用动态连接库时候的问题!!!!!!!! 新手问题,求救 在Java 中判断窗体是否已打开问题, 帮我一下 谢谢 repaint()不能执行,请教高人
String ret = String.format(Locale.US, "d = %20f", d);
System.out.println(ret);
System.out.println("d = " + new java.text.DecimalFormat("0.00").format( d ) );
那个方法好像会保留很多位的小数,我只想要两位或一位,怎么解决?to:hdhmail2000(禅剑飞雪)
打印出来的结果好像不正确哦...to:malligator(不能再整天泡在CSDN里了!)
你的方法好像不光是数据不正确,连小数点都没了...救命啊 !~~~~~~~~~~~~~~~~~~~~~~~
double d = 11111111111111111111111.0;
System.out.println("d = " + new java.text.DecimalFormat("0.00").format( d ) );
要想不损失的话,可能要自己写加减乘除法的运算了
下面是我写的计算任意整数阶乘的算法,里面有大数加法,乘法的算法,你参考下了
/**
* 文件Test.java
* @author hdhmail2000(禅剑飞雪)
*
*/
public class Test
{
/**
* 大数加法
*/
public String add(String a,String b)
{
String big=a.length()>b.length()?a:b;
String small=a.length()>b.length()?b:a;
int dot=0; //进位
StringBuffer result=new StringBuffer("");
char[] cBig=((new StringBuffer(big)).reverse()).toString().toCharArray();
char[] cSmall=((new StringBuffer(small)).reverse()).toString().toCharArray();/*
* 计算最小的一个与大的一个小的部分的和
*/
for(int i=0;i<cSmall.length;i++)
{
int temp=Integer.parseInt(String.valueOf(cBig[i]))+Integer.parseInt(String.valueOf(cSmall[i]))+dot;
dot=temp/10;
result.append(temp%10);
}/*
* 对大的一个进行计算
*/
for(int j=cSmall.length;j<cBig.length;j++)
{
int temp2=Integer.parseInt(String.valueOf(cBig[j]))+dot;
dot=temp2/10;
result.append(temp2);
}/*
* 结果的位数超过最大的时候进行进位
*/
if(dot>0)
{
result.append(dot);
}
result=result.reverse();
return result.toString();
}
/**
* 大数乘法
*/
public String multiply(String a,String b)
{
char[] cA=((new StringBuffer(a)).reverse()).toString().toCharArray();
char[] cB=((new StringBuffer(b)).reverse()).toString().toCharArray();String result="0";
for(int i=0;i<cA.length;i++)
{
StringBuffer tempSingle=new StringBuffer("");/*
* 一个数的每一位数乘以另外一个数
*/
int dot=0; //进位
for(int j=0;j<cB.length;j++)
{
int temp=Integer.parseInt(String.valueOf(cA[i]))*Integer.parseInt(String.valueOf(cB[j]))+dot;
tempSingle.append(temp%10);
dot=temp/10;
}/*
* 处理进位
*/
if(dot>0)
{
tempSingle.append(dot);
}
tempSingle=tempSingle.reverse();
for(int k=0;k<i;k++)
{
tempSingle.append("0");
}/*
* 把每一个数乘以另一个数的结果调用加法方法相加起来
*/
result=add(result,tempSingle.toString());
}
return result;
}/**
* 求n的阶乘
*/
public String factor(String a)
{String n="1";
for(int i=1;i<=Integer.parseInt(a);i++)
{
n=multiply(n,String.valueOf(i));
}
return n;
}/**
* 主函数
*/
public static void main(String[] args)
{
Test test=new Test();
System.out.println(test.factor("100"));}
}