Войти

Показать полную графическую версию : [решено] С# проблема с приведением типов


Hector
04-11-2011, 21:57
есть, задание Дано n вещественных чисел. Определить, образуют ли они арифметическую последовательность
вот попытка решения

using System;
using System.Collections.Generic;
using System.Text;

namespace lab3_v21
{
class Program
{
static void Main()
{
Console.Write("Количество цифр ");
int n = Convert.ToInt16(Console.ReadLine());
double[] line=new double[n];
int i=0;
for (i = 0; i < n; i++)
{
Console.Write("{0}-я цифра ",i+1);
line[i] = Convert.ToDouble(Console.ReadLine());
}
bool flag = false;
double razn = line[1] - line[0]; // находим разность между членами ряда, для последующего сравнения
for (i = 0; i < n-1; i++)
{
if (line[i + 1] - line[i] !=razn)
{
Console.WriteLine("Последовательность не является возрастающей");
flag = true;
break;
}
}
if (!flag)
Console.WriteLine("Последовательность возрастающая");

Console.ReadLine();
}
}
}

проблема в том, при вводе цифр 0,1 - 1 - 1,9 результат Последовательность не является возрастающей хотя должно быть наоборот :)
если вводить целые числа, все работает нормально, а с вещественными через раз, что поправить?

ferget
05-11-2011, 04:24
если заменить double на decimal, то будет работать

Hector
05-11-2011, 12:46
обошел эту трудность с помощь округления, а из-за чего такая проблема возникла, можно немного теории?

SeRgikON
05-11-2011, 17:28
ошибка округления в double, связанная с формой представления числа в этом типе..если интересно тут (http://dev.gardenquestions.com/en/question/what-is-the-difference-between-decimal-float-and-double-in-c) например почитай




© OSzone.net 2001-2012