Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] С# проблема с приведением типов (http://forum.oszone.net/showthread.php?t=219725)

Hector 04-11-2011 21:57 1788773

С# проблема с приведением типов
 
есть, задание
Цитата:

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

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 (
0ni++)
            {
                
Console.Write("{0}-я цифра ",i+1);
                
line[i] = Convert.ToDouble(Console.ReadLine());
            }
            
bool flag false;
            
double razn line[1] - line[0]; // находим разность между членами ряда, для последующего сравнения
            
for (0n-1i++)
            {
                if (
line[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 1788915

если заменить double на decimal, то будет работать

Hector 05-11-2011 12:46 1789026

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

SeRgikON 05-11-2011 17:28 1789160

ошибка округления в double, связанная с формой представления числа в этом типе..если интересно тут например почитай


Время: 13:50.

Время: 13:50.
© OSzone.net 2001-