C# 将年换算成十进制

C# 将年换算成十进制,c#,asp.net-mvc-5,decimal,nodatime,C#,Asp.net Mvc 5,Decimal,Nodatime,我正在构建一个应用程序,我的用户需要将当前日期和用户出生日期(以年为单位)之间的差值设置为十进制格式 更新 一个准确的例子是: 出生日期-1974年11月22日 当前日期-2017年2月27日 年龄=42.27 在我的代码中,我正在使用 所以 以上面的例子。。它将产生24.00。。但是我需要.00作为实际的十进制数 有办法做到这一点吗?我不想把数字四舍五入。我需要准确无误。您可以使用 ViewModelObject.Age = (decimal) ((dateNow - dateOfBirt

我正在构建一个应用程序,我的用户需要将当前日期和用户出生日期(以年为单位)之间的差值设置为十进制格式


更新

一个准确的例子是:

出生日期-1974年11月22日

当前日期-2017年2月27日

年龄=42.27


在我的代码中,我正在使用

所以

以上面的例子。。它将产生
24.00
。。但是我需要
.00
作为实际的十进制数

有办法做到这一点吗?我不想把数字四舍五入。我需要准确无误。

您可以使用

ViewModelObject.Age = (decimal) ((dateNow - dateOfBirth).TotalDays / 365.25);
对于一个年龄段的人,基本上有两种系统:

  • 基于日历。年龄是基于y/m/d值和常识或法律规则的整数。月份长度(28/30/31)被忽略,闰日被滚动。不支持小数年或小数天的概念

  • 生物医学或统计学。通常根据天数/365.25计算。这只会给你一个近似值,它可能不同于周年纪念的法律定义

您可以使用

ViewModelObject.Age = (decimal) ((dateNow - dateOfBirth).TotalDays / 365.25);
对于一个年龄段的人,基本上有两种系统:

  • 基于日历。年龄是基于y/m/d值和常识或法律规则的整数。月份长度(28/30/31)被忽略,闰日被滚动。不支持小数年或小数天的概念

  • 生物医学或统计学。通常根据天数/365.25计算。这只会给你一个近似值,它可能不同于周年纪念的法律定义



这里需要一个特定的逻辑。首先,您需要确定小数点是什么样子。例如,如果它是24年6个月,那么它应该是24.5(0.5是1的一半)还是24.6(6个月是半年)。你认为天也是小数的一部分吗?考虑到24年和6个月将是24.6,我很难理解你是如何到达42.270的。然后有一个跳跃年的问题。周期年返回一个<代码>长< /代码>,所以这是错误的工具。是的,但是甚至365.25是一个近似值。当你需要一个非常准确的儿童数字时,你可能需要一些更好的规则。你需要一个特定的逻辑。首先,您需要确定小数点是什么样子。例如,如果它是24年6个月,那么它应该是24.5(0.5是1的一半)还是24.6(6个月是半年)。你认为天也是小数的一部分吗?考虑到24年和6个月将是24.6,我很难理解你是如何到达42.270的。然后有一个跳跃年的问题。周期年返回一个<代码>长< /代码>,所以这是错误的工具。是的,但是甚至365.25是一个近似值。当你需要一个非常准确的孩子数字时,你可能需要一些更好的规则。这是否可能会导致一个年龄稍微太低,即使你检查了确切的日期,或稍微太高,如果你检查了生日之前的日期?(即,四舍五入错误,这样你的生日就不是42岁,而是41.9999岁,或者你的生日前一天不是41.99999岁,而是42岁),这正是这个公式的作用。我出生于1971年2月23日,如果你输入该日期+2020年2月23日,看看我有多大,你会看到你的公式输出48.99931,而它至少应该输出49。恐怕没这么容易。但是,是的,如何处理闰年对OP来说是一个非常有效的问题。当你要求用小数表示年龄时,你需要(应该接受)正常的四舍五入规则。对于出生在闰日附近的小孩来说,有更大的错误。请注意,我在视图中将舍入值保留为2位小数,您的样本将显示为49.0。我们不知道此应用程序将用于什么用途,如果您在挪威18岁生日时出现购买啤酒,并且由于收银机声称您17.999岁而被拒绝,则可能是舍入错误,您无法接受。至少我会要求OP指定一些规定闰年的规则,以及这些规则的准确性。拉西,我同意这对于法律目的来说是不够的。但我在统计应用程序中经常看到这一点,因此这里假设为“正常”。如果OP是在做一个政府应用程序,他应该已经有了更好的规格。这会不会产生一个年龄稍微太低,即使你检查了确切的日期,或者稍微太高,如果你检查了生日之前的日期?(即,四舍五入错误,这样你的生日就不是42岁,而是41.9999岁,或者你的生日前一天不是41.99999岁,而是42岁),这正是这个公式的作用。我出生于1971年2月23日,如果你输入该日期+2020年2月23日,看看我有多大,你会看到你的公式输出48.99931,而它至少应该输出49。恐怕没这么容易。但是,是的,如何处理闰年对OP来说是一个非常有效的问题。当你要求用小数表示年龄时,你需要(应该接受)正常的四舍五入规则。对于出生在闰日附近的小孩来说,有更大的错误。请注意,我在视图中将舍入值保留为2位小数,您的样本将显示为49.0。我们不知道此应用程序将用于什么用途,如果您在挪威18岁生日时出现购买啤酒,并且由于收银机声称您17.999岁而被拒绝,则可能是舍入错误,您无法接受。至少我会要求OP指定一些规定闰年的规则,以及这些规则的准确性。拉西,我同意这对于法律目的来说是不够的。但我在统计应用程序中经常看到这一点,因此这里假设为“正常”。如果OP是在做一个政府应用,他已经有了更好的规格了。