@swyt

(windows. forms) Почему не правильно вычисляет?

Когда я ввожу число 6 оно возводится в квадрат, получается 36, оно делится на 10 получается 3,6 и записывается в переменную k, во второй переменной число округляется в меньшую сторону, в итоге получается 3, потом от 3,6 отнимается 3, должно получатся 0,6, но при выводе я вижу 0,59999.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        double n, b, c, d = 0, k;
        int a = 0;
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            char number = e.KeyChar;
            if (!Char.IsDigit(number) && number != 8 && number != 44)
            {
                e.Handled = true;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            {
                label2.Text = "Введите число";
            }
            else
            {
                label2.Visible = false;
                n = int.Parse(textBox1.Text);
                for (int i = 1; i <= n; i++)
                {
                    b = i;
                    c = i * i;
                    d = 0;

                    while (b >= 1)
                    {
                        b = b / 10;
                        d += 1;
                    }
                    for (int j = 1; j <= d; j++)
                    {
                        c = c / 10;
                    }
                    k = c;//здесь получается 3,6
                    c = Math.Floor(c);//здесь 3
                    k = k - c;//здесь 0,59999
                    for (int l = 1; l <= d; l++)
                    {
                        k = k * 10;
                    }
                    if (k == i)
                    {
                        a += 1;
                    }

                }
                label1.Text = a.ToString();
                a = 0;
            }
        }
    }
}
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 2
GavriKos
@GavriKos
Welcome to float.
Потому что нет целых вычислений. 4/2 == 1.9999. Или 2.00001. Почитайте про представление чисел с плавающей точкой в памяти
Ответ написан
@majstar_Zubr
C++, C#, gamedev
получается 3, потом от 3,6 отнимается 3, должно получатся 0,6


В общем случае - нет, не должно.

А вот если округлять правильно
Math.Round(double_num,2); , то с указанной точностью всё гарантируется.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы