Рисование двойника и отображение десятичных разрядов?

#c# #double #decimal

#c# #двойной #десятичное

Вопрос:

 public class ExperienceTable
{
    public static int MaxExperiencePoints;
    public static double PercentToNextLevel;

    public static void checkLevel(Hero player)
    {
        if (player.ExperiencePoints >= 0)
        {
            player.Level = 1;
            MaxExperiencePoints = 15;
            PercentToNextLevel = player.ExperiencePoints / MaxExperiencePoints;
        }
    }
  

Затем выводим его на экран с помощью:

         GameRef.SpriteBatch.DrawString(GUIFont, ""   ExperienceTable.PercentToNextLevel, new Vector2((int)player.Camera.Position.X   1200, (int)player.Camera.Position.Y   676), Color.White);
  

Почему десятичные разряды не отображаются? Похоже, что числа округляются.

Ответ №1:

По умолчанию десятичный знак не будет отображаться, если double изначально уже является округленным числом. Я предполагаю, что player.ExperiencePoints это int . И int деленное на другое int всегда приведет к int , что приведет к округленному значению.

Предполагая, что это player.ExperiencePoints действительно int , и вы хотите получить дробь при ее делении, вам следует изменить линию деления на следующую:

 PercentToNextLevel = (double) player.ExperiencePoints / MaxExperiencePoints;
  

И если вы хотите, чтобы десятичные разряды отображались независимо от того, что это .00 , тогда измените ExperienceTable.PercentToNextLevel на что-то вроде следующего.

 ExperienceTable.PercentToNextLevel.ToString("0.00")
  

.ToString("0.00") преобразует значение double в строку с 2 десятичными разрядами и округляет его до двух десятичных разрядов, если это необходимо.

Ответ №2:

Я думаю

 PercentToNextLevel = player.ExperiencePoints / MaxExperiencePoints;
  

является ли целочисленным делением (то есть, если player.ExperiencePoints является целым числом).

Попробуйте это:

 PercentToNextLevel = (double)player.ExperiencePoints / MaxExperiencePoints;
  

Ответ №3:

Если player.ExperiencePoints также является int , то вы делите целое число на целое число, и результатом является округленное целое число. Вместо этого используйте

 PercentToNextLevel = (double)player.ExperiencePoints / MaxExperiencePoints