我有以字符串格式存储的值&我想转换成十进制。
前任:
11.10
当我尝试转换为十进制时,我已经以字符串格式存储它给我11.1
而不是11.10
.
我通过以下方式尝试过
string getnumber="11.10";
decimal decinum=Convert.ToDecimal(getnumber);
我也试过这个
decinum.ToString ("#.##");
但它返回字符串,我想要十进制。
这可能是什么解决方案?
正如已经评论11.1
过的,它的值与11.10
decimal one=11.1;
decimal two=11.10;
Console.WriteLine(one == two);
将输出true
to string 方法中的#
格式化程序表示一个可选数字,如果它为零,则会抑制(并且抑制是有效的 - 0
in4.05
不会被抑制)。尝试
decinum.ToString("0.00");
你会看到字符串值11.10
理想情况下,您实际上想要使用类似的东西
string input="11.10";
decimal result;
if (decimal.TryParse(input,out result)) {
Console.WriteLine(result == 11.10);
} else {
// The string wasn't a decimal so do something like throw an error.
}
在上述代码的末尾,结果将是您想要的小数,“true”将输出到控制台。
这将完美地工作
string getnumber = "11.10";
decimal decinum = Math.Round(Convert.ToDecimal(getnumber), 2);
decimal
数据类型存储一个值。11.1 的值与 11.10 的值相同 - 从数学上讲,它们是完全相同的数字,因此它的行为正确。
您似乎想要将数字显示为 11.10,但这取决于显示它的代码 - 我不知道您是在写入日志文件、在网页上显示还是在任何其他格式上显示 - 但那独立于数据类型的内部表示decimal
。
没有解决方案,这是预期的行为。
11.10
在字符串中 =11.1
在数字中
您不能在小数部分存储零,否则11.10
将不同于11.100
,如果您谈论的是字符串,则这是正确的,但如果您谈论的是数字,则不是。
我认为您的问题仅在演示级别上。你为什么不更好地解释你想要做什么。
用小数表示的 11.10 是 11.1,就像它是 11.1000000000000000000000000000000000000 一样。
对于数学过程,不要担心它如何显示自己。如果您要显示该值,那么将其转换为字符串也不是什么大问题。请记住
decinum.ToString ("#.##");
正在返回一个字符串(来自“ToString”函数),而不是将“decinum”转换为字符串。
string getnumber = "11.10";
double decinum = double.Parse(getnumber);