java / C中的Integer / Float类#

时间:2014-05-28 17:56:23

标签: java c#

我在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#类,但它们没有等效的类。所以,我尝试使用Pasrse:

private String updateTargetValue() {
        int i, i1;
        float f, f1;
        ...

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

     }

i1看起来正确但我在f1中感到厌倦。有谁知道如何解决它?

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

  

最好的重载方法需要匹配解析..

提前致谢

3 个答案:

答案 0 :(得分:6)

C#与Java没有相同的双float / Float(也不是int或任何其他内置'原语'因为它们&# 39;在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

答案 1 :(得分:2)

你可以简单地改变这个:

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,因为您使用的方法不正确。此外,错误消息告诉您出了什么问题。尽力了解它们。

答案 2 :(得分:2)

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

int? i, i1;
float? f, f1;

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