gpt4 book ai didi

c# - 为什么 TimeSpan.TotalHours 计算不正确?

转载 作者:行者123 更新时间:2023-11-30 20:39:42 25 4
gpt4 key购买 nike

我有以下代码:

DateTime PunchIn = DateTime.Parse("12/10/2015 5:06:00 PM");
DateTime PunchOut = DateTime.Parse("12/10/2015 5:30:00 PM");
double WorkedTime;
WorkedTime = (PunchOut - PunchIn).TotalHours;

MessageBox.Show(WorkedTime.ToString());

WorkedTime 的值应为 0.4 (24/60)。

但是从下面的截图可以看出,计算出来的值为0.39999999...

screenshot1

但更令人困惑的是,MessageBox 将计算值显示为 0.4

screenshot2

谁能帮忙解释一下这种看似奇怪的行为吗?

编辑:如果这是“浮点不准确”,那么如何解决才能在代码中得到 0.4 的答案?

最佳答案

许多十进制数无法在不损失精度的情况下表示为二进制 float 。就像 1/3 不能表示为有限的十进制数一样。

您得到的是可以用所选格式表示的最接近的数字。

您有 2 个选项可以在代码中获得 0.4 的结果:

您可以使用Math.Round来删除无意义的数字:

workedTime = Math.Round(timeSpan.TotalHours, 3)

或者您可以使用十进制并自行将TotalMinutes除以60:

decimal workedTime = (decimal)timeSpan.TotalMinutes / 60;

ToString() 不带参数或 "G" format specifier会自动将 double 值舍入为 15 位数字。

0.3999999999999997.ToString() // "0.4"
0.399999999999997.ToString() // "0.399999999999997"

关于c# - 为什么 TimeSpan.TotalHours 计算不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34073494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com