楼主的标题好吸引眼球啊
不过问题倒是不大
其实这不是什么诡异的事情,java里面就是这样的啊
i/j的时候结果就是i,j当中的最高精度的数据类型,所以这里是double
double的默认数据精度就是这么多位的,所以就是这个结果啦
要想处理请使用java.text.NumberFormat类来控制精度

解决方案 »

  1.   

    呵呵,我只希望你的学生不要对java失去信心。
      

  2.   

    我跟你说ms 的VB在处理器不同的情况下.后面的结果会不一样。我们公司以前做的软件就是
      

  3.   

    这老师确实比较弱 十进制的0.1在二进制没有精确的对应
    以下摘录之《高质量C/C++编程指南》const float EPSINON = 0.00001;if ((x >= - EPSINON) && (x <= EPSINON)不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
      

  4.   

    您是老师啊?  感叹,可怜的学生。这是因为浮点数原理的问题(包括 Float 和 Double)浮点数使用指数和小数点位置配合的方式描述一个数值所以它天生无法精确表示某写数值,会产生 1.999999  或 9.000000001 这类情况(不只是 Java 语言的才有)但需要精确表示一个数值时(比如 金钱、科学计算),使用任何数字 format 来解决也是徒劳的,应为它不是简单的格式问题Java 提供了java.math.BigDecimal 类来解决这类准确计算工作
      

  5.   

    两进制无法精确表示1/10,就象10进制无法精确表示1/3一样,所以会出现楼主所提到的问题。所以在java里如果对精度有特殊要求的话(例如金融计算或高要求的科学计算),要用BigDecimal或BigInteger对象。
      

  6.   

    C#中?可能用了java的BigDecimal或BigInteger的做法,
    如果按照一般的二进制的做法是不可能出现正常的结果的.
    这是由于计算机的二进制的存储造成的.
      

  7.   

    我靠,进错了,这种问题也那么大惊小怪,这是JAVA的精度问题。
      

  8.   

    是计算机就是这个结果...c#不是说明它内部作了手脚,java的bigdecimal也有此功能
    !!!
    呵呵.. 学学计算机原理