C# decimal double 获取一组数字 小数点后最多有几位

有一组数字,想判断一组数字中最多的有几位小数,乘以10的指定幂,转为整数,此处教大家一个高级的写法,拒接无脑for循环

decimal

decimal[] numbers = new decimal[] { 1.2345m, 2.3456789m, 3.456m, 4.56789m, 5.67890m, 6.78901234m };
int maxDecimalPlaces = numbers.Max(n => decimal.GetBits(n)[3] >> 16);
int[] intNumbers = numbers.Select(n => (int)(n * (decimal)Math.Pow(10, maxDecimalPlaces))).ToArray();

 

double: 如果想更短,可以double转decimal然后用上面的

double[] numbers = new double[] { 1.2345, 2.3456789, 3.456, 4.56789, 5.67890, 6.78901234 };
int maxDecimalPlaces = numbers.Max(n => {
    string str = n.ToString();
    int decimalIndex = str.IndexOf(".");
    return decimalIndex >= 0 ? str.Length - decimalIndex - 1 : 0;
});
int[] intNumbers = numbers.Select(n => (int)(n * Math.Pow(10, maxDecimalPlaces))).ToArray();

 

posted @ 2023-05-10 14:00  戈凹高  阅读(147)  评论(0编辑  收藏  举报