#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