2016-05-10 4 views
0

Может кто-то, пожалуйста, помогите мне с этим. Я пытаюсь заменить значение с тем же значением, но только с первым десятичным числом. Как вы можете видеть ниже, я получаю тот же результат, с которого я начинаю.Пытается заменить двойное значение в списке

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 
    } 
} 

EDIT: Я не хочу округлять значение!

+0

использование '' Math.Round'' –

+0

Отредактировано мое сообщение, я не хочу округлять значение. – Andy

+0

можете ли вы сказать, что мешает вам использовать это? –

ответ

0

Вот решение конкретного на ваш вопрос: Просто используйте преобразования для получения значений

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; 
    } 
} 
0

Ehsan Sajjad является правильным. Вы должны использовать 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 
    } 
} 
-1

Вы можете сделать:

var trunkatedValue = Math.Floor(correctionQoutas[i].Value*10); //28 
Смежные вопросы