我的asp.net mvc web应用程序中有以下模型类: -
[Display(Name="RAM (in GB)")]
public Nullable<long> TOTALMEMORY { get; set; }
表示以字节为单位的总计量。现在我需要通过在我的控制器类上执行以下操作将字节转换为GB: -
.MemoryInfo.TOTALMEMORY = (server.SystemInfo.MemoryInfo.TOTALMEMORY / (1024 * 1024 * 1024));
然后在视图上将使用以下两种语法显示: -
@Html.EditorFor(model =>model.SystemInfo.MemoryInfo.VIRTUALMEMORY)
OR
@(Model.SystemInfo.MemoryInfo == null ? "" : Model.SystemInfo.MemoryInfo.TOTALMEMORY.ToString())
因此,如果数据库中的值为8583778304
,则两种方式都会在剃刀视图中显示为7
而不是7.99
?任何人都可以尝试什么问题?
修改 目前
@Html.EditorFor(model =>model.SystemInfo.MemoryInfo.TotalMemoryGB)
将显示7.99426651000977
而不是7.99
而@(Model.SystemInfo.MemoryInfo == null ? "" : Model.SystemInfo.MemoryInfo.TotalMemoryGB.ToString())
将显示6.51925802230835E-09。所以你能建议吗?
答案 0 :(得分:1)
TOTALMEMORY
是一个long值,表示它是一个64位整数。它根本不能容纳像7.99这样的十进制数。而且由于你使用整数除法,它总是只修剪结果,即忽略小数点后的所有内容。
如果小数对您很重要,请将其更改为可以为空的双重
public double? TOTALMEMORY { get; set; }
甚至更好,保持字段不变,保留EF映射,并添加连接到它的计算属性:
public long? TOTALMEMORY { get; set; }
[Display(Name="RAM (in GB)")]
public double? TotalMemoryGB
{
get
{
// The 1024.0 serves to force double division, instead of integer
return TOTALMEMORY / 1024.0 / 1024.0 / 1024.0;
}
set
{
TOTALMEMORY = (long) (value * 1024 * 1024 * 1024);
}
}
现在,在您的UI中,您可以使用TotalMemoryGB,并以千兆字节为单位工作,同时保留数据库中的字节。