c# - Math.Truncate 的问题,将双精度数转换为整数
问题描述
首先,您现在应该是编程新手,英语不是我的母语,我来自德国。
我正在尝试编写一个程序,它告诉我已经过去了多少天、多少小时和多少分钟,最后是用户输入。对于用户输入,我有双变量(时间)和整数(天),在这个例子中,我输入了 14.40(它就像下午 2.40,在德国我们写成 14.40)和 2(星期二)。现在我想编写以下句子:“自星期一 1 日以来,已经过去了 14 小时 40 分钟!” 对此,他打印出“自星期一 1 日起,已过去 1440 小时零 0 分钟!”
为了拆分双倍,我使用 Math.Truncate 得到完整的小时数 (14),然后我从用户输入 (14.40) 中减去它,得到分钟数 (40)。
我在互联网上找不到该问题的解决方案,希望你们能帮助我。
class Program
{
static void Main(string[] args)
{
int day;
double time;
int VDays;
double VHours;
double VMinutes;
Console.Write("Which day do we have? (1=Monday, 2=Tuesday, ...):\n");
day = Convert.ToInt32(Console.ReadLine());
Console.Write("Which time is it?\n");
time = Convert.ToDouble(Console.ReadLine());
VDays = day - 1;
VHours = Math.Truncate(time);
VMinutes = time - VHours;
Console.WriteLine("Since Monday" + VDays + " Day, " + VHours + " Hours and " + VMinutes + " minutes have passed!");
Console.ReadLine();
}
}
解决方案
经过测试,我可以确认这是Klaus Gütter提到的语言环境问题。
由于Convert.ToDouble
使用您的德语区域设置并且逗号是德语中的小数分隔符,因此它会忽略点并将 14.40 解释为 1440。
您可以使用以下方法重新创建问题:
time = Convert.ToDouble(Console.ReadLine(), CultureInfo.GetCultureInfo("de-DE").NumberFormat);
.
您可以指定用于解决问题的语言环境,这里使用InvariantCulture:
time = Convert.ToDouble(Console.ReadLine(), CultureInfo.InvariantCulture);
您还需要将 VMinutes 乘以 100 才能工作,因为从时间中减去整数值会得到一个介于 0 和 1 之间的数字(即14.40 - 14 = 0.40, 0.40 * 100 = 40
分钟已过)。
推荐阅读
- sql - 嵌套 sql 聚合函数的语法
- node.js - 在 MacOS 中使用 Homebrew 安装节点时卡住了:fork.rb:49:in `write': Broken pipe (Errno::EPIPE)
- java - 如何在 Heroku 中运行 Spring Boot WAR 应用程序?
- matplotlib-basemap - 底图加 3d 图
- python - Python:数组的numpy数组的外积的所有排列的总和
- java - Ubuntu 上的 Javac
- pdf - 重命名 PDF 嵌入字体
- kotlin - 将 Java 转换为 Kotlin(以函数作为参数)
- php - laravel 控制器中未收到复选框值
- python - 按钮“开始”以其他五个按钮结束,每个按钮一个。tkinter