如何在 Java 中将整数转换为浮点数?

Posted

技术标签:

【中文标题】如何在 Java 中将整数转换为浮点数?【英文标题】:How can I convert integer into float in Java? 【发布时间】:2011-05-21 15:23:22 【问题描述】:

我有两个整数 xy。我需要计算x/y,结果我想获得浮动。例如,作为3/2 的结果,我想要 1.5。我认为最简单(或唯一)的方法是将xy 转换为浮点类型。不幸的是,我找不到一个简单的方法来做到这一点。你能帮我解决这个问题吗?

【问题讨论】:

浮点结果 = ((float)x) / y? 看看这个:xahlee.org/java-a-day/casting.html Java: dividing 2 ints makes an int?的可能重复 @VinAy:在这种情况下,我建议这样做。 BigDecimal 不是 float 的普遍正确替代品。 @VinAy:这完全取决于目的是什么。如果他在做金融,你是对的。如果他在计算小行星的轨迹,那么你不是。 【参考方案1】:

//我要转换的整数

int myInt = 100;

//将整数转换为浮点数

float newFloat = (float) myInt

【讨论】:

至少在 android Studio 中,编译器会抱怨尝试执行此操作的类型不兼容。【参考方案2】:

您只需将第一个值转移到浮点数,然后再参与进一步的计算:

float z = x * 1.0 / y;

【讨论】:

【参考方案3】:

同样的:

float l = new Float(x/y)

不会工作,因为它会先计算 x 和 y 的整数除法,然后从中构造一个浮点数。

float result = (float) x / (float) y;

在语义上是最佳候选者。

【讨论】:

您的回答应该是评论。 Sameer 不会收到您的帖子的通知。从语义上讲,在计算结果之前将两个整数都转换为浮点数是不必要的 - 因此它并不比只转换一个更好。它给人一种错误的印象,因此是低等的,恕我直言。【参考方案4】:

除非必须,否则不应使用浮点数。在 99% 的情况下,双倍是更好的选择。

int x = 1111111111;
int y = 10000;
float f = (float) x / y;
double d = (double) x / y;
System.out.println("f= "+f);
System.out.println("d= "+d);

打印

f= 111111.12
d= 111111.1111

关注@Matt 的评论。

float 的精度非常低(6-7 位),并且很容易显示出明显的舍入误差。 double 有另外 9 位的准确度。在 99% 的情况下,使用 double 而不是 float 的成本是名义上的,但是由于舍入错误导致的细微错误的成本要高得多。出于这个原因,许多开发人员建议根本不使用浮点数,而强烈推荐使用 BigDecimal。

但是我发现在大多数情况下可以使用 double 如果使用了合理的舍入

在这种情况下,int x 具有 32 位精度,而 float 具有 24 位精度,即使除以 1 也可能产生舍入误差。另一方面,double 具有 53 位精度,足以获得相当准确的结果。

【讨论】:

你应该详细说明为什么doublefloat好。【参考方案5】:

你可以这样做:

public static void main(String[] args) 
    // TODO Auto-generated method stub
    int x = 3;
    int y = 2;
    Float fX = new Float(x);
    float res = fX.floatValue()/y;
    System.out.println("res = "+res);

再见!

【讨论】:

完全不需要使用包装器类型 (Float)。 请在您的帖子中don't use signatures or taglines。【参考方案6】:

您只需要将至少一个操作数强制转换为浮点数:

float z = (float) x / y;

float z = x / (float) y;

或(不必要的)

float z = (float) x / (float) y;

【讨论】:

这是否比:float z = (1.0 * x) / y; ?内部浮点转换是否比乘法更有效? Tnx! 我不知道,但我认为 99% 或更多的时间都无关紧要。它甚至不会成为一个瓶颈。如果你真的那么担心,benchmark it yourself. 第一个和第二个会在某些 arm 设备上导致错误,请确保同时转换两个整数。 java.lang.Integer 不能转换为 java.lang.Float @user3002853 了解盒装类型与原语。 docs.oracle.com/javase/tutorial/java/data/autoboxing.html

以上是关于如何在 Java 中将整数转换为浮点数?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中将半精度浮点数(字节)转换为浮点数

如何在python中将23位浮点数从字符串转换为浮点数并返回?

如何在 JavaScript 中将字符串转换为浮点数?

如何在python中将数据帧中的符号转换为浮点数?

在 Netezza 中将带分数转换为浮点数

在 C# 中将字符串转换为浮点数