当前位置: 代码迷 >> J2SE >> Java基础有关问题,望大神不吝赐教
  详细解决方案

Java基础有关问题,望大神不吝赐教

热度:20   发布时间:2016-04-23 20:27:15.0
Java基础问题,望大神不吝赐教

这是什么原因导致的,小数点前带上整数就没有问题,去掉整数就有问题了。
------解决方案--------------------
这是科学计数法。
------解决方案--------------------

print
public void print(double d)打印双精度浮点数。按照平台的默认字符编码将 String.valueOf(double) 生成的字符串转换为字节,并完全以 write(int) 方法的方式
写入这些字节。 

参数:
d - 要打印的 double
另请参见:
Double.toString(double)




toString
public static String toString(double d)返回 double 参数的字符串表示形式。下面提到的所有字符都是 ASCII 字符。 
如果参数为 NaN,那么结果为字符串 "NaN"。 
否则,结果是表示参数符号和数值(绝对值)的字符串。如果符号为负,那么结果的第一个字符是 '-' ('\u002D');如果符号为正,那么结果中不显示符号字符。对于数值 m: 
如果 m 为无穷大,则用字符 "Infinity" 表示;因此,正无穷大生成结果 "Infinity",负无穷大生成结果 "-Infinity"。 
如果 m 为 0,则用字符 "0.0" 表示;因此,负 0 生成结果 "-0.0",正 0 生成结果 "0.0"。 
如果 m 大于或者等于 10-3,但小于 107,则采用不带前导 0 的十进制形式,用 m 的整数部分表示,后跟 '.' ('\u002E'),再后面是表示 m 小数部分的一个或多个十进制数字。 
如果 m 小于 10-3 或大于等于 107,则使用所谓的“计算机科学记数法”表示。设 n 为满足 10n <= m < 10n+1 的唯一整数;然后设 a 为 m 与 10n 的精确算术商,从而 1 <= a < 10。那么,数值便表示为 a 的整数部分,其形式为:一个十进制数字,后跟 '.' ('\u002E'),接着是表示 a 小数部分的十进制数字,再后面是字母 'E' ('\u0045'),最后是用十进制整数形式表示的 n,这与方法 Integer.toString(int) 生成的结果一样。 
必须为 m 或 a 的小数部分显示多少位呢?至少必须有一位数来表示小数部分,除此之外,需要更多(但只能和需要的一样多)位数来唯一地区分参数值和 double 类型的邻近值。这就是说,假设 x 是用十进制表示法表示的精确算术值,是通过对有限非 0 参数 d 调用此方法生成的。那么 d 一定是最接近 x 的 double 值;如果两个 double 值都同等地接近 x,那么 d 必须是其中之一,并且 d 的有效数字的最低有效位必须是 0。 
要创建浮点值的本地化字符串表示形式,请使用 NumberFormat 的子类。 


参数:
d - 要转换的 double 值。 
返回:
参数的字符串表示形式。


------解决方案--------------------
上初中的时候,就不习惯科学计数法,现在还是看不惯。
------解决方案--------------------
还是上初中的时候,科学计数法的形式好看一点,高中大学都是1.04e5这种形式,上大学之后更是看着都难受
------解决方案--------------------
科学计数法啊。
------解决方案--------------------
这个~~~用科学计数法表示简洁一些,加了1后如果还用科学技术法反而复杂了
你要是想要显示0开头的可以这样
BigDecimal n = new BigDecimal(0.00204);
System.out.println(n);

------解决方案--------------------
你想要原样显示也可以这样:
计算的时候不会产生任何影响,只不过是显示方式问题
System.out.print(String.valueOf(a));
或者
System.out.print(""+a);
------解决方案--------------------

    public static String doubleToString(Object value)
    {
        DecimalFormat df = new DecimalFormat("#,###");
        String strValue = df.format(value);
        return strValue;
    }


遇到科学计数法的时候,一般把他转成字符串,如果你后边要用数据类型,再找他转回来
------解决方案--------------------
1.23E-4
1.23*(10^-4),科学计数法
------解决方案--------------------
没问题...
------解决方案--------------------
国际IEEE标准,E-4相当于10的-4次幂
------解决方案--------------------
这个没有追究的必要吧
------解决方案--------------------
科学计数法,这样可以节省存储空间,记的小数位也会很长很长,更加精确了。
------解决方案--------------------
科学计数法,没有问题。
------解决方案--------------------
科学计数法,没有问题
------解决方案--------------------
用不用科学计数法不是看你的小数点前面有没有小数点,编译器会根据你的数选用一种最佳的输出策略
比如下面,虽然小数点前面有整数,但是由于数太长了,还是会采用科学计数法:
package dsg;

public class test {

public static void main(String[] args) {
double s = 11111111111.000023;
double a = 0.000023;
System.out.println("s = " + s);
System.out.println("a = " + a);
}
}
  相关解决方案