2016-08-18 3 views
-2

Я хочу, чтобы моя функция возвращала значение только с двумя знаками после запятой. Я попытался следующий код:Нужно только 2 цифры после десятичной точки

private static double CalculateSlabTax(int nSlabStartTaxable, int nSlabEndTaxable, float fSlabRate) 
{ 
    double dblSlabResult = 0; 
    try 
    { 
     dblSlabResult = (nSlabStartTaxable - nSlabEndTaxable) * fSlabRate; 
     dblSlabResult = Math.Round(dblSlabResult , 2); 
     return dblSlabResult; 
    } 
    catch (Exception) 
    { 
     return -1; 
    } 
} 

Ожидаемый результат: dblSlabResult = ####.## - две цифры (например, 1002.05.)

Getting выход как: например. dblSlabResult = 1002.1

+0

Возможно ли, что номер у вас был чем-то вроде '1002.101'? Тогда, округленный до двух цифр, «1002,1» - ожидаемый результат. Ваш метод расчета правильный. –

+2

Показать входы. Кроме того, попытка/улов бессмысленна. – harold

+0

Входы @harold находятся в параметре метода, и попробуйте поймать не бессмысленно –

ответ

0

Очень простой. Попробуйте это

public double UptoTwoDecimalPoints(double num) 
{ 
    var totalCost = Convert.ToDouble(String.Format("{0:0.00}", num)); 
    return totalCost; 
} 
0

Символ # является необязательным заполнителем цифр. Используйте 0 для обеспечения цифр при преобразовании в строку:

string.Format("{0:#.##}", 1002.1) == "1002.1" 
string.Format("{0:0.00}", 1002.1) == "1002.10" 

Не ожидайте определенное количество цифр при округлении float или double. Это просто цифры, независимо от их строкового формата.

0

Какие входные данные вы используете? Math.Round должен работать правильно, что говорит о том, что вышеприведенная строка возвращает двойную цифру только с 1 значительной цифрой.

0

форматирование. В вашем случае ровно две цифры после запятой означает, что строка формата "F2"

double source = 1234.56789; 
// 1234.57 
var result = source.ToString("F2"); 
Смежные вопросы