Java如何获取一个double类型数值的前两位小数?

6

我有一个很大的双精度数,想要将其转换为小数并保留前两位小数。以下是示例:

double x = 0.36843871
float y = magicFunction(x)
print(y)

输出:36

如果您不理解,请随时提问。


展示magicFunction的实现。 - Ramanlfc
你需要仅保留前两个数字并将其存储为浮点数吗?还是根据你的示例,输出需要是36.843871? - Jitendar M
我需要一个没有小数位的浮点输出。 - ThatPixelCherry
0.36843871不是一个很大的双精度浮点数。然而,双精度浮点数的实际范围对答案有很大影响,因此您需要提供它,或者说明它是否未知。 - user207421
4个回答

6

您可以将数值乘以100,并使用Math.floor(double)函数,例如:

int y = (int) Math.floor(x * 100);
System.out.println(y);

我收到了(所请求的)

36

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

太棒了!正是我在寻找的。谢谢 :D - ThatPixelCherry
7
如果 x 大于 1,你将得到一个超过两位数的答案。 - Dan Sin
1
如果x % 1d * 100大于1,则返回翻译后的文本。 - WalterM
这里根本不需要使用 Math.floor()。整数转换就可以完成所有操作。 - user207421
为什么要使用 Math.floor 或整数转换而不是 Math.rint?请尝试使用 x 等于 0.29 的代码进行测试。 - Patricia Shanahan

3
您可以将x乘以100,并使用int代替float。我尝试了以下代码:
double x = 0.36843871;
int y = (int)(x*100);
System.out.println(y);

然后得到输出:

36

2

如果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 );

返回36。前两位数字是23。 - user207421
现在,将零乘以100的确切意义是什么? - user207421

2
为了正确处理负数和所有范围,请按如下方式操作:
double y = Math.abs(x);
while (y < 100)
    y *= 10;
while (y > 100)
    y /= 10;
return (float)(int)y;

你还需要正确处理零,但未显示。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接