import static java.lang.Math.*;
public class Hello
{
public static void main(String[] args)
{
double myNum = 1234.5678;
long myNum2 = (long)Math.floor(myNum);
double myNum3 = ((int)(myNum*100))/100;
System.out.println(myNum3);
}
}
取2位小数,程序输出1234.0,理想输出应该是1234.56,请问什么原因?
mport static java.lang.Math.*;
public class Hello
{
public static void main(String[] args)
{
double myNum = 1234.5678;
long myNum2 = (long)Math.floor(myNum);
double myNum3 = ((int)(myNum*100))/100[color=red].0f[/color];
System.out.println(myNum3);
}
}
把 /100 换成 /100.0f 即可。
原因:
(int)(myNum*100) 是整数
整数 除100 (此100 也是整数) 所以结果还是整数 最后赋值给一个浮点数, 是将一个整数的结果转换成浮点数, 此时已晚
而整数 除100.0 (100.0f 也可以), 是整数以浮点数运算,所以先将被除数转换成浮点数,再进行除法运算;最后赋值的时候没有再经过转换
((int)myNum*100) 得到一个int 型的数字。你再拿 一个int型的数字 去除以100。 肯定也会得到一个整数,不会有小数点的。
(double)((int)myNum*100) 得到一个 double型的数字,再去除以100就OK了。
(double)((int)(myNum*100)))/100 。
[code="java"] public static void main(String[] args) {
double myNum = 1234.5678;
double myNum2 = Math.floor(myNum * 100) / 100 ;
System.out.println(myNum2);
}[/code]
输出:
1234.56
[size=x-large][color=red]这样就可以了.
double myNum = 1234.5678;
long myNum2 = (long)Math.floor(myNum);//首先这个得到的就是1234了.
double myNum3 = ((int)(myNum*100))/100; 这个得到的也是1234.0
System.out.println(myNum3); //你这里自然打出来了.[/color][/size][code="java"]package com.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
/**
@Date 2010-4-6 下午01:15:41
*/
public class TestNetwork {
public static void main(String[] args) {
double myNum = 1234.5678;
long myNum2 = (long) Math.floor(myNum*100);
double myNum3 = (double)myNum2 / 100;
System.out.println(myNum2);
System.out.println(myNum3);
}
}[/code]