1

这是我的程序的代码:

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等于9001.5小时数传递给我的程序。

如果我运行它www.ideone.com,我会看到输出是90 minutes相同的值1.5

我在哪里可以在我的代码中犯错误?为什么我的程序在不同地方运行时的行为会有所不同?

4

1 回答 1

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;
于 2013-09-21T07:22:48.200 回答