这是我的程序代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace YourGold
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Welcome to YourGold App! \n------------------------");
Console.WriteLine("Inesrt your gold: ");
int gold;
while (!int.TryParse(Console.ReadLine(), out gold))
{
Console.WriteLine("Please enter a valid number for gold.");
Console.WriteLine("Inesrt your gold: ");
}
Console.WriteLine("Inesrt your time(In Hours) played: ");
float hours;
while (!float.TryParse(Console.ReadLine(), out hours))
{
Console.WriteLine("Please enter a valid number for hours.");
Console.WriteLine("Inesrt your hours played: ");
}
float time = ((int)hours) * 60 + (hours % 1) * 100; ; // Here the calculation are wrong...
Console.WriteLine("Your total time playd is : " + time + " minutes");
float goldMin = gold / time;
Console.WriteLine("Your gold per minute is : " + goldMin);
Console.WriteLine("The application has ended, press any key to end this app. \nThank you for using it.\n but no thanks");
Console.ReadLine();
//Console.WriteLine(" \nApp self destruct!");
//Console.ReadLine();
}
}
}
当我尝试使用我的本地Visual Studio环境运行它时,我在控制台中看到minutes
的输出在900
小时内传入程序时等于1.5
。
如果我在www.ideone.com
上运行此操作,我会看到相同值90 minutes
的输出为1.5
。
我的代码在哪里可能出错? 为什么在不同的地方运行我的程序行为会有所不同?
答案 0 :(得分:7)
我强烈怀疑当你在本地运行时,你处于一种文化,其中,
是小数点分隔符而不是.
- 也许.
是千位分隔符,基本上被忽略了。所以1.5
最终被解析为15小时,即900分钟。
要验证这一点,请尝试输入1,5
- 我怀疑您将获得90的结果。
如果要强制执行.
为小数点分隔符的设置,只需将文化传递到float.TryParse
:
while (!float.TryParse(Console.ReadLine(), NumberStyles.Float,
CultureInfo.InvariantCulture, out hours))
请注意,您不需要自己完成所有算术 - 使用TimeSpan
为您完成此操作。
int minutes = (int) TimeSpan.FromHours(hours).TotalMinutes;