static string RoundFirstSignificantDigit(string input) {
BigDecimal significantDigit = new BigDecimal(input);
var floatLength = input.Split('.')[1].Length;
return significantDigit.setScale(floatLength - 1, BigDecimal.ROUND_HALF_UP).toString().TrimEnd('0');
public static void Main()
Console.WriteLine(RoundFirstSignificantDigit("123.99999"));
Console.WriteLine(RoundFirstSignificantDigit("123.823467283762378"));
Console.WriteLine(RoundFirstSignificantDigit("123.823467283762398"));
Console.WriteLine(RoundFirstSignificantDigit("123.09999999"));
Console.WriteLine(RoundFirstSignificantDigit("122.00000009"));
Console.WriteLine(RoundFirstSignificantDigit("124.81379281"));
Console.WriteLine(RoundFirstSignificantDigit("129.07872345"));
Console.WriteLine(RoundFirstSignificantDigit("129.07872344"));
Console.WriteLine(RoundFirstSignificantDigit("0.007841274592873578162948753498742458787548748723465349872135100699999"));
Console.WriteLine(RoundFirstSignificantDigit("0.07841274592873578162948753498742458787548748723465349872135100699999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"));