黑马程序员技术交流社区
标题:
java中取小数的问题
[打印本页]
作者:
焦晨光
时间:
2012-7-17 11:21
标题:
java中取小数的问题
本帖最后由 焦晨光 于 2012-7-18 08:36 编辑
我是一个java初学者,今天看书在做题的时候遇到一个问题:
import static java.lang.Math.*;
public class Hello
{
public static void main(String[] args)
{
double Num = 1234.5678;
long Num2 = (long)Math.floor(Num);
double Num3 = ((int)(Num*100))/100;
System.out.println(Num3);
}
}
取2位小数,程序输出1234.0,理想输出应该是1234.56,请问什么原因?
作者:
黑马刘涛
时间:
2012-7-17 11:32
本帖最后由 黑马刘涛 于 2012-7-17 11:35 编辑
public class Hello {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
double Num = 1234.5678;
//long Num2 = (long)Math.floor(Num);
double Num4 = (int)(Num*100);
double Num3 = (double)((int)(Num*100))/100;// double 类型数值与整型数值相除,会保留小数
System.out.println(Num4);
System.out.println(Num3);
}
}
复制代码
double Num3 = ((int)(Num*100))/100; //两个整数相除,会发生什么?比如3/2 = 1,((int)(Num*100))/100 = 123456/100 =1234,然后结果转为double类型,Num3 = 1234.0
作者:
孙新强
时间:
2012-7-17 11:56
double Num3 = ((int)(Num*100))/100;
这句话的意思就是:
((int)(Num*100))/100是一个整数 然后把这一个整数 赋值给double类型变量Num3 结果就是1234.0
修改后代码如下:
import static java.lang.Math.*;
public class Hello
{
public static void main(String[] args)
{
double Num = 1234.5678;
long Num2 = (long)Math.floor(Num);
double Num3 = (int)(Num*100);
double Num4=Num3/100;
System.out.println(Num4);
}
}
作者:
王达
时间:
2012-7-17 11:56
本帖最后由 王达 于 2012-7-17 11:59 编辑
import static java.lang.Math.*;
public class Hello
{
public static void main(String[] args)
{
double Num = 1234.5678;
long Num2 = (long)Math.floor(Num); //
不知道你的Num2有什么用阿
double
Num3 = ((int)(Num*100))/100; //
你这里的int把Num*100后的值转成了int型,再除以100后他还默认是int型的。。1234只不过你又给Num3加个类型让最后运行的结果1234变为double而已。
System.out.println(Num3);
}
}
//你可以这么来得到1234.56
public class Hello
{
public static void main(String[] args)
{
double Num = 1234.5678;
long Num2 = (long)(Num*100);
System.out.println(Num2);
double Num3 = (double)Num2/100;
System.out.println(Num3);
}
}
作者:
韩伟
时间:
2012-7-17 11:57
这个过程是这样的
首先,(Num*100)得到一个double型的数12345.67
然后,执行(int)(12345.67)就是强制把double转换成 int 型 结果为12345
之后就是连个整形相除 即123456/100,结果依然是一个int型数 1234
最后就是把一个int型的数负值给一个double行的变量,那么那么系统会在int型数后加 .0
于是就得到最后的结果 1234.0
作者:
樊佰轩
时间:
2012-7-17 12:19
double Num3 = ((int)(Num*100))/100;
这一句话应该改为如下:
double Num3 = ((double)(int)(Num*100))/100;
解释:
Num=1234.5678 --double类型
Num*100=123456.78 --double类型
(int)(Num*100)=123456 --int类型
(int)(Num*100)/100=1234 -- int类型
当它强转成double时为1234.0
而修改为上述时,指在它除100前先转成double
(double)(int)(Num*100)=123456.0 --double类型
此时除100
((double)(int)(Num*100))/100=1234.56 -- double类型
作者:
陈少文
时间:
2012-7-18 08:26
本帖最后由 陈少文 于 2012-7-18 08:30 编辑
用函数NumberFormat解决
在一般的要求中,需要四舍五入
import java.text.NumberFormat;
public class RegexDemo
{
public static void main(String args[])
{
double Num = 1234.5678;
//NumberFormat 是所有数字格式的抽象基类
NumberFormat ddf1 = NumberFormat.getInstance();
// 设置数的小数部分的最大位数。
ddf1.setMaximumFractionDigits(2);
String s = ddf1.format(Num);
System.out.print(s);
}
}
未命名.jpg
(68.87 KB, 下载次数: 79)
下载附件
2012-7-18 08:29 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2