C# 正在尝试替换列表中的双精度值

C# 正在尝试替换列表中的双精度值,c#,asp.net-mvc,C#,Asp.net Mvc,有人能帮我做这个吗。我试图用相同的值替换该值,但只替换为第一个小数点。正如你在下面看到的,我最终得到了和我开始时一样的结果 public class QoutaDataHolder { public double StartTime { get; set; } public double EndTime { get; set; } public double Value { get; set; } public string QoutaRuleID { get; set;

有人能帮我做这个吗。我试图用相同的值替换该值,但只替换为第一个小数点。正如你在下面看到的,我最终得到了和我开始时一样的结果

public class QoutaDataHolder
{
  public double StartTime { get; set; }

  public double EndTime { get; set; }

  public double Value { get; set; }

  public string QoutaRuleID { get; set; }
}

List<QoutaDataHolder> correctionQoutas

for (int i = 0; i < correctionQoutas.Count; i++)
{
  if (correctionQoutas[i].Value % 1 != 0) //Value = 2.88888889
  {
    var trunkatedValue = Math.Truncate(correctionQoutas[i].Value*10); //28
    double newValue = trunkatedValue/10; // Back to 2.88888889!?!?
    correctionQoutas[i].Value = newValue; // Want to assign 2.8
  }
}
公共类数据持有者
{
公共双起始时间{get;set;}
公共双端时间{get;set;}
公共双值{get;set;}
公共字符串QoutaRuleID{get;set;}
}
列表更正QOUTAS
对于(int i=0;i

编辑:我不想对值进行四舍五入

埃桑·萨贾德是对的。您需要使用Math.Round,第二个参数为1

for (int i = 0; i < correctionQoutas.Count; i++)
{
  if (correctionQoutas[i].Value % 1 != 0) //Value = 2.88888889
  {
    correctionQoutas[i].Value = math.Round(correctionQoutas[i].Value, 1); // Want to assign 2.8
  }
}
for(int i=0;i
您可以执行以下操作:

var trunkatedValue = Math.Floor(correctionQoutas[i].Value*10); //28

这里有一个特定于您的问题的解决方案:只需使用转换来获取值

for (int i = 0; i < correctionQoutas.Count; i++)
{
    if (correctionQoutas[i].Value % 1 != 0) //Value = 2.88888889
    {
        var trunkatedValue = (int)(correctionQoutas[i].Value * 10); //28
        double newValue = (double)trunkatedValue / 10; // not back to 2.88888889 anymore
        correctionQoutas[i].Value = newValue;
    }
}
for(int i=0;i
use
Math.Round
编辑了我的帖子,我不想对值进行舍入。你能告诉我是什么阻止你使用它吗?我不能复制这个。
newValue
的结果是
2.8