Nie można niejawnie prze konwertować typu „double” na „byte”

Odpowiedz Nowy wątek
2018-11-23 18:13
0

Dzień dobry
Nie potrafię poradzić sobie z rzutowaniem linijki tab[i,j]=Math.Pow(i,j) . Czy mógłby ktoś podać mała podpowiedz co z tym dalej ?

using System;

namespace Tablice1
{
class Program
{
static void Main(string[] args)
{
byte w, k;
Console.Write("Podaj pierwsza liczbe: ");
w = Convert.ToByte(Console.ReadLine());
Console.Write("Podaj druga liczbe: ");
k = Convert.ToByte(Console.ReadLine());

        byte[,] tab = new byte[w, k];

        for(int i=0 ; i < tab.GetLength(0) ; i++)
            for (int j = 0; j < tab.GetLength(1); j++)
            {

                tab[i, j] = Math.Pow(i,j);

            }
        for (int i = 0; i < tab.GetLength(0); i++)
        {
            for (int j = 0; j < tab.GetLength(1); j++)
            {
                Console.Write(tab[1, j] + " ");
            }
            Console.WriteLine();
        }

                Console.ReadKey();
    }
}

}

edytowany 2x, ostatnio: Wojtek Kwasniak, 2018-11-23 18:15

Pozostało 580 znaków

2018-11-23 18:59
0
tab[i, j] = (byte) Math.Pow(i,j);

edyta: Ale nie wiem czy dobrym pomysłem jest trzymanie tego w typie byte, bo max dla byte to 255

edytowany 1x, ostatnio: kzkzg, 2018-11-23 19:01

Pozostało 580 znaków

2018-11-23 19:21
0

dzięki bardzo już znalazłem sposób tab[i, j] = Convert.ToByte(Math.Pow(i,j)); robię to w typie byte bo taka jest treść zadanie które muszę zrobić

edytowany 1x, ostatnio: Wojtek Kwasniak, 2018-11-23 19:27

Pozostało 580 znaków

2018-11-23 21:09
0

Można konwertować tak i tak ale lepiej i bezpieczniej jest korzystać z metody Convert.ToByte(double).
Metody klasy Convert sprawdzają czy nie nastąpiło przepełnienie.
Metoda Convert.ToByte(double).działa dwuetapowo . Najpierw wykonywana jest konwersja na int a następnie na byte

natomiast zwykła konwersja działa w niestandardowy sposób.

            double dV = 2147483647.5 + 1000.0;
            int iV = (int)dV;
            Console.WriteLine(iV == int.MinValue);
              double dV = 255.0 + 1000.0;
              byte iV = (byte)dV;
              Console.WriteLine(iV);

Ja osobiście nie lubię typów zmiennoprzecinkowych ale nie ma innych do np. wyciągania pierwiastków. Obliczenia na liczbach zmiennoprzecinkowych to oczywiście - przybliżenia.
Nie da się zapisać ułamka dziesiętnego w systemie dwójkowym , 0.1 to w rzeczywistości 0.10000000000000001 a np. 100.1 to 100.09999999999999

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0