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