java/ c#中的整数/浮点类

本文关键字:整数 java | 更新日期: 2023-09-27 18:05:31

我在java中有这个代码:

private String updateTargetValue() {
    Integer i, i1;
    Float f, f1;
    ...
    f1 = new Float(f.floatValue() *  i.intValue() );
    i1 = new Integer(f1.intValue());
    ...
 }

要将这段代码转换为c#,我需要为Integer和Float找到一个等效的c#类,但它们没有等效的类。所以,我尝试使用passe:

private String updateTargetValue() {
        int i, i1;
        float f, f1;
        ...
        f1 = float.Parse((float)f * (int)i);
        i1 = Convert.ToInt32((int)f1);
        ...
     }

1看起来是正确的,但我在f1中得到了错误。有人知道怎么解吗?

错误是在((float)f * (int)i):

最佳重载方法为parse..取match

.

Thanks in advance

java/ c#中的整数/浮点类

c#没有与Java相同的双float/Float(也没有int或任何其他内置的'原始',因为它们在Java中被称为。

所以你可以直接使用数字

例如,这是有效的c#:

string s = 123.ToString();

在你的代码中有:

Convert.ToInt32((int)f1);

第一步是强制转换:

(int)f1

将float类型强制转换为int类型。该表达式的结果是int类型。

在int上调用Convert.ToInt32不是无效的,但它不做任何事情,只是浪费。如果知道转换是安全的,就进行强制转换。但是,如果入站值可能是其他值(可能是字符串),那么调用Convert.ToInt32可能是更好的选择。


简言之,这段Java代码:

Integer i, i1;
Float f, f1;
...
f1 = new Float(f.floatValue() *  i.intValue() );
i1 = new Integer(f1.intValue());

在c#中应该是:

int i, i1;
float f, f1;
...
f1 = f * i;
i1 = (int)f1; // cast required for narrowing conversion

您可以简单地更改:

f1 = float.Parse((float)f * (int)i);
i1 = Convert.ToInt32((int)f1);

:

f1 = f * ((float)i);
i1 = ((int)f1);

然后你可以把它转换成一个字符串,如下所示:

string sf1 = f1.ToString();
string si1 = i1.ToString();

我建议查看您正在使用的每个方法的API,因为您正在错误地使用这些方法。此外,错误消息还会告诉您哪里出错了。尽力去理解他们。

Java Integer和Float是可空的,所以我认为更准确的转换将是:

int? i, i1;
float? f, f1;
f1 = new float?((float)f * (int)i);
i1 = new int?((int)f1);