Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java获取双精度的前2位小数_Java_Math_Double - Fatal编程技术网

Java获取双精度的前2位小数

Java获取双精度的前2位小数,java,math,double,Java,Math,Double,我有一个巨大的双精度,我想从中得到前两个十进制数字作为浮点。以下是一个例子: double x = 0.36843871 float y = magicFunction(x) print(y) 输出:36 如果您不懂,请随意提问。您可以将100相乘,然后使用like 我得到了(请求的) 请注意,如果使用float,则会得到36.0您可以将x乘以100,并使用int代替float。我尝试了以下代码: double x = 0.36843871; int y = (int)(x*100); Sys

我有一个巨大的双精度,我想从中得到前两个十进制数字作为浮点。以下是一个例子:

double x = 0.36843871
float y = magicFunction(x)
print(y)
输出:
36


如果您不懂,请随意提问。

您可以将
100相乘,然后使用like

我得到了(请求的)


请注意,如果使用
float
,则会得到
36.0

您可以将
x
乘以100,并使用
int
代替float。我尝试了以下代码:

double x = 0.36843871;
int y = (int)(x*100);
System.out.println(y);
并得到如下输出:

36

如果x大于1且为负值:

    double x = -31.2232;
    double xAbs = Math.abs( x );
    String answer = "";
    if( ( int )xAbs == 0 ) {
        answer = "00";   
    }
    else {
        int xLog10 = ( int )Math.log10( xAbs );
        double point0 = xAbs / Math.pow( 10, xLog10 + 1 ); // to 0.xx format
        answer = "" + ( int )( point0  * 100 );   
    }
    System.out.println( answer );

要正确处理阴性情况和所有范围,请执行以下操作:

double y = Math.abs(x);
while (y < 100)
    y *= 10;
while (y > 100)
    y /= 10;
return (float)(int)y;
double y=Math.abs(x);
而(y<100)
y*=10;
而(y>100)
y/=10;
返回(浮动)(整数)y;

您还需要正确处理未显示的零。

显示
magicFunction
实现您是否只需要“仅”前2个数字并将其存储为浮点数(或)根据您的示例,您是否需要输出为36.843871??我需要一个不带数字和小数的浮点数输出。0.36843871不是一个巨大的双精度。但是,双精度的实际范围确实会对答案产生巨大的影响,所以你需要提供它,或者说它是否未知。太棒了!这正是我想要的。谢谢:如果DIf x大于1,您将得到一个2位数以上的答案。
x%1d*100
如果大于1,您根本不需要
Math.floor()。整型转换可以完成所有操作。为什么是
Math.floor
还是整数转换而不是
Math.rint
?尝试使用x等于0.29.36测试此代码。前两位数是23。现在,0乘以100的确切意义是什么?
    double x = -31.2232;
    double xAbs = Math.abs( x );
    String answer = "";
    if( ( int )xAbs == 0 ) {
        answer = "00";   
    }
    else {
        int xLog10 = ( int )Math.log10( xAbs );
        double point0 = xAbs / Math.pow( 10, xLog10 + 1 ); // to 0.xx format
        answer = "" + ( int )( point0  * 100 );   
    }
    System.out.println( answer );
double y = Math.abs(x);
while (y < 100)
    y *= 10;
while (y > 100)
    y /= 10;
return (float)(int)y;