如何将C#速度计算程序的结果以小数形式显示?
问题:如何让速度计算结果以小数形式显示?
作业题目
编写一个计算速度的程序:接收距离(单位:meters)和时间(分为三个数值:hours、minutes、seconds),计算速度的三种单位:meters per second、kilometres per hour、miles per hour(提示:1 mile = 1609 meters),并将结果输出至Console。
现有代码
int distanceInMeters, hours, minutes, seconds; Console.WriteLine("Please type distance in meters: "); distanceInMeters = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Please type time in hours: "); hours = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Please type time in minutes: "); minutes = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Please type time in seconds: "); seconds = Convert.ToInt32(Console.ReadLine()); int metersSecond, kmH, milesH; metersSecond = distanceInMeters / ((hours * 3600) + (minutes * 60) + seconds); kmH = (distanceInMeters / 1000) / (hours + (minutes / 60) + (seconds / 3600)); milesH = (distanceInMeters / 1609) / (hours + (minutes / 60) + (seconds / 3600)); Console.WriteLine("Your speed in meters/seconds is: " + metersSecond); Console.WriteLine("Please speed in km/h is: " + kmH); Console.WriteLine("Please speed in miles/h is: " + milesH);
问题原因
当前代码用int(整数类型)存储计算结果,且整数之间的除法会自动截断小数部分,只保留整数,所以输出都是整数。要显示小数,需要改用浮点类型并调整计算逻辑。
修改方案
1. 替换结果变量类型
将存储速度结果的变量从int改为double(双精度浮点类型,适合小数计算):
double metersSecond, kmH, milesH;
2. 触发浮点除法
整数除法会丢失小数,计算时需要将至少一个操作数转为浮点类型(比如在数值后加.0,或用(double)强制转换),确保计算过程保留小数。
3. 优化时间计算(推荐)
先把时间统一转换成总秒数或总小时数,逻辑更清晰,减少出错概率。
修改后的完整代码
int distanceInMeters, hours, minutes, seconds; Console.WriteLine("Please type distance in meters: "); distanceInMeters = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Please type time in hours: "); hours = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Please type time in minutes: "); minutes = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Please type time in seconds: "); seconds = Convert.ToInt32(Console.ReadLine()); // 统一计算总秒数和总小时数 double totalSeconds = hours * 3600 + minutes * 60 + seconds; double totalHours = totalSeconds / 3600; // 使用double存储浮点结果 double metersSecond, kmH, milesH; metersSecond = (double)distanceInMeters / totalSeconds; kmH = (distanceInMeters / 1000.0) / totalHours; milesH = (distanceInMeters / 1609.0) / totalHours; // 格式化输出,保留2位小数 Console.WriteLine($"Your speed in meters/seconds is: {metersSecond:F2}"); Console.WriteLine($"Your speed in km/h is: {kmH:F2}"); Console.WriteLine($"Your speed in miles/h is: {milesH:F2}");
额外说明
{变量:F2}是格式化语法,可指定保留的小数位数,比如F3表示保留3位小数。- 如果需要更高精度,可以改用
decimal类型,日常计算用double足够。
内容的提问来源于stack exchange,提问作者Emil Ko
相关产品推荐
相关产品推荐

