Это потому, что вы превращаете его в double
, и, поскольку все, кто потратил время на вычисления значений с плавающей запятой, будут знать, значения двойной точности не являются бесконечными прецизионными значениями. Выбранное значение находится как можно ближе к тому, что вы предоставляете, но это не всегда то, что вы хотите.
Если у вас есть строка числовой стиль, который вы хотите раздеться конечные нули от, почему вы не просто раздеть конечные нули от него, что-то вроде:
if (s.Contains(".")) {
Regex regex = new Regex("\\.?0*$");
s = regex.Replace(s,"");
}
чек для .
чтобы убедиться, что вы не отделяете нулевые нули от числа, например 1000
. Как только вы узнаете, что там есть десятичная точка, нули (и сама десятичная точка, если это - все нули после этого), могут быть уничтожены безнаказанно. Вы можете увидеть его в действии в следующей полной программе консоли:
using System;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static string StripZ(string s)
{
if (s.Contains("."))
{
Regex regex = new Regex("\\.?0*$");
s = regex.Replace(s, "");
}
return s;
}
static void Main(string[] args)
{
Console.WriteLine(StripZ("123.400"));
Console.WriteLine(StripZ("3.0"));
Console.WriteLine(StripZ("7."));
Console.WriteLine(StripZ("1000"));
Console.ReadLine();
}
}
}
Выход этой программы:
123.4
3
7
1000
Спасибо за это, все ответы были действительно полезны, чтобы понять проблему и как способ продвижения вперед. Будет использовать регулярное выражение pax для форматирования моих чисел. –
@ user2776472 Это хороший ответ, и я думаю, вы должны его принять –