Я хочу написать функцию, которая принимает 4 аргумента и выводит строку, удовлетворяющую следующим условиям:
До сих пор я имел дело с 3 из 4 столбцов; однако у меня возникают проблемы с десятичным аргументом. Я не могу понять, как совместить произвольную точность с фиксированным десятичным знаком. Вот что я получил до сих пор:
public String PrintRow(string fieldName, string fieldUnit, double value, string description){
return string.Format(
" {0,4}.{1,-4} {2,8:####0.0000####} : {3,-25}\n",
fieldName, fieldUnit, value, description);
}
Вот несколько примеров, которые я хотел бы сделать:
STRT.M 57.4000 : Start
STOP.M 485.8000 : Stop
STEP.M 0.1524 : Step
SMTN.FT -111.2593615 : Something Cool
Что мне делать?
Это должно дать вам то, что вы хотите:
public static string PrintRow(string token, string unit, double value, string desc)
{
// convert the number to a string and separate digits
// before and after the decimal separator
string[] tokens = value
.ToString()
.Split(new string[] { CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator }, StringSplitOptions.RemoveEmptyEntries);
// calculate padding based on number of digits
int lpad = 11 - tokens[0].Length;
int rpad = 19 - tokens[1].Length;
// format the number only
string number = String.Format("{0}{1}.{2}{3}",
new String(' ', lpad),
tokens[0],
tokens[1],
new string(' ', rpad));
// construct the whole string
return string.Format(" {0,-4}.{1,-4}{2} : {3,-23}\n",
token, unit, number, desc);
}
CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
в качестве разделителя десятичных дробей при разбиении числа.
CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
. Смотрите ответ ниже.