2012-04-24 2 views
2

У меня есть gridview, тянущееся из таблицы SQL, и оно содержит переменные цифры в долларах. Они в тысячах, миллионах или миллиардах. В настоящее время я использую {0: c0}, но я заинтересован в том, чтобы похудеть, чтобы я показал только три значимые цифры.Как округлить валюту в gridview до значительных цифр?

Например, я бы хотел, чтобы 3,411,216,512,07 долларов США отображался как 3,41 доллара США; тогда как 1 066 555,54 доллара будет отображаться в размере 1,07 млн. долл. США.

Есть ли простой способ сделать это в ASP.NET или мне нужно разбить jQuery? Или, наоборот, должен ли я сделать это в C# OnRowDataBound?

+0

Можете ли вы изменить данные в источнике данных, прежде чем привязывать его к gridview? – Servy

+0

Я могу. Тогда возникает вопрос, лучше ли это делать в SQL с использованием подхода Surreal Dreams и добавления другого столбца для каждого значения или лучше сделать это на C#, используя два других ответа? В конечном счете мы говорим только пару сотен строк (большинство из них скрыты от пользователя до тех пор, пока вас не попросят), поэтому я сомневаюсь, что увижу проблему с производительностью. – ScottieB

ответ

0

Вы можете преобразовать число в строку, захватить первые четыре символа - считая чистое число без единиц, запятых и т. Д. - преобразовать его обратно в число, округлить его, а затем подсчитать длину оригинала string, чтобы решить, где положить десятичную точку и что обозначить ее, будь то B, M, K и т. д. Я бы предложил сделать это на стороне сервера, я не вижу смысла делать это в браузере, если только вы хотите сделать его интерактивным.

0

Я бы сделал это в OnRowDataBound. Убедитесь, что ваш номер больше миллиарда, разделите его на миллиард, string.format на «B» на конце, а символ валюты на лицевой стороне - затем верните. Проверьте, превышает ли число миллион ... и т. Д.

Возможно, вы могли бы написать алгоритм для динамического управления им, но поскольку это деньги, и это, вероятно, ограничивается триллионами, выполнение которых вручную должно быть намного быстрее.

0
if(n>999999) 
    { 
    string number = Convert.ToString(n.slice[0,3]) + "M"; 
    ... 
//> (apply it to your datatable and then show it (in datagridview if that's 
//> what you're using) 
    } 
    else if (n>...) 

Повторите, что в случаях, когда это по Bilion, и т.д., но есть еще необходимость проверить, где запятая будет. Я не знаю, как это сделать. Вот как вы можете получить первые 3 числа, как вы хотели, и применить «B» или «M».