将整型变量转换为双精度浮点型

18

我是一名初学的C#程序员,正尝试创建一个计算器。但我似乎无法弄清楚如何将int类型的变量转换为double类型。以下是我的代码:

public void oImpartire() {
    if (rezultat % value == 0)
    {
        rezultat /= value;
    }
    else {
       (double)rezultat /= value;  // this should be double but I get an error
    }
}

我该如何使这个代码工作?

编辑:result和value都是int类型的变量。


8
阅读错误信息。 - Adam
我们不知道 rezultatvalue 的类型,因为您没有包含声明它们的代码段。在涉及类型转换的问题中,这样的信息非常重要。 - Rotem
@H2CO3 我认为这并不是一个显而易见的假设,考虑到问题的情况。 - Rotem
@H2CO3:codesparkle 不是原帖作者。 - Tim Schmelter
@H2CO3 假设我们都是正确的,不要污染评论区 :) - Rotem
显示剩余5条评论
5个回答

24

是的,但它实际上不会将我的变量转换为双精度变量,它只会转换值,对吗? - Nistor Alexandru
1
这并没有回答问题。 - user529758
3
@user985482 你无法转换变量的类型。C# 是静态类型语言。 - Rotem

14
(double)rezultat /= ...

这不好。强制类型转换表达式的结果始终是一个 rvalue,即无法分配的内容。相关:您无法更改表达式的类型(可以将其强制转换,但这实际上不会真正更改其类型,只是暂时作为另一种类型)。一旦您将变量声明为 int,您将无法在其中存储 double - 无论如何进行除法强制转换等操作,最终都将被截断。

您很可能需要引入一个 double 临时变量来存储除法的结果。


顺便提一下,如果OP正在开发一个计算器应用程序,最好使用“decimal”类型而不是“double”。 - Rotem
@Rotem 是的。不过我仍然不明白为什么他需要对双精度数执行模运算。 - user529758

2
如果您的两个变量不是 double 类型,将它们赋值给一个 double 变量,然后再进行除法运算。
VarDouble = (double)int.....; VarDouble /= VarDouble1 etc

(double)rezultat /= value

我猜你想把rezultat变成一个double,但是我猜它没有被声明为一个double,所以你不能这样做。你的结果变量,用来保存result的值,也必须是一个double,否则你只会得到一个整数而不是四舍五入后的值。


0

这取决于rezultat变量的类型。如果是double,那么你不需要做任何事情,整数除法在任何情况下都不会使用。但如果是int,那么你的强制转换没有任何意义,你不能将一个double值存储在int变量中。

因此,正确的解决方案取决于您想要做什么。但如果您的目标是将实际除法的结果作为double,则需要一个double变量。如果有了那个变量,您的if语句将不再有意义,在所有情况下都应该使用double除法。


0

试试这个:

double rezultat = 1992;
rezultat /= value;

resultat必须是一个double以存储rezultat / value的结果。否则,如果resultatvalue都是int,你将得不到浮点数。例如,5 / 3 = 1,但(double)5 / 3 = 1.666667。请注意,值1.6666667只是一个double


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接