0

我不断收到此错误:

“不能将类型'double'隐式转换为'int'。存在显式转换(您是否缺少演员表?)”

代码:

Console.WriteLine("ISBN-Prüfziffer berechnen");
Console.WriteLine("=========================");
Console.WriteLine();
Console.Write("ISBN-Nummer ohne Prüfziffer: ");
string ISBNstring = Console.ReadLine();
int ISBN = Convert.ToInt32(ISBNstring);
int PZ;
int i;
double x = Math.Pow(3, (i + 1) % 2);
int y = (int)x;
for (i = 1; i <= 12; i++)
{
    PZ = ((10-(PZ + ISBN * x) % 10) % 10);
}
Console.WriteLine(PZ);
Console.ReadLine();

这是新代码:

 Console.WriteLine("ISBN-Prüfziffer berechnen");
Console.WriteLine("=========================");
Console.WriteLine();
Console.Write("ISBN-Nummer ohne Prüfziffer: ");
string ISBNstring = Console.ReadLine();
long ISBN = Convert.ToInt32(ISBNstring);
long ISBN1 = (Int64)ISBN;
int PZ = 0;
int i;
for (i = 1; i <= 12; i++)
{
    double x = Math.Pow(3, (i + 1) % 2);
    long y = (double)x;
    PZ = ((10 - (PZ + ISBN * y) % 10) % 10);
}
Console.WriteLine(PZ);
Console.ReadLine();

但我仍然收到 double to long 和 long to int 的转换错误...

4

1 回答 1

12

我认为你的意思是在这里使用你的y变量而不是x

PZ = ((10-(PZ + ISBN * y) % 10) % 10);

作为旁注,您将在两者上得到编译错误PZi,您需要在使用它们之前初始化它们的值,例如int PZ = 0;int i = 0;

请使用有意义的名称;PZ, i,x并且y对于阅读您的代码的人,甚至在几周内对您来说,都没有任何意义。


好吧,我稍微修改了一下...

Console.WriteLine("ISBN-Prüfziffer berechnen");
Console.WriteLine("=========================");
Console.WriteLine();
Console.Write("ISBN-Nummer ohne Prüfziffer: ");
string ISBNstring = Console.ReadLine();

int sum = 0;
for (int i = 0; i < 12; i++)
{
    int digit = ISBNstring[i] - '0';
    if (i % 2 == 1)
    {
        digit *= 3;
    }
    sum += digit;
}
int result = 10 - (sum%10);

Console.WriteLine(result);
Console.ReadLine();

以下是更改:
- 您可以直接在 for 循环中声明 i,它会为您节省一行。
- 不要将 ISBN 放入一个长字符串中,而是放入一个字符串中。只需逐个迭代每个字符。
- 每个数字都可以通过取ASCII值,去掉0的值来获得。
-% 2 == 1事情基本上是“如果数字在奇数位置”,你可以应用*3。这取代了你Math.Pow不是很清楚的。

于 2013-11-15T07:57:47.000 回答