我在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):
最好的重载方法需要匹配解析..
提前致谢
答案 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);