我正在编写一个关于将取自不同textboxes
的两个双精度变量相乘并在另一个textbox
显示结果的代码。但我无法得到正确的结果。
我的代码是:
double mny = Convert.ToDouble(textBoxMny.Text);
double winmultiplier = Convert.ToDouble(textBoxwinmultiplier.Text);
win1 = mny * winmultiplier;
textBox1win.Text = win1.ToString();
我给了mny = 0.000015
和winmultiplier 5.21
.文本框显示结果7815
。
521*15 = 7815
,似乎C#省略了分隔符,所以我认为问题是您的系统双分隔符不.
,请尝试使用,
作为分隔符。此外,请尝试使用 double.Parse()
方法。
使用 win1.ToString("0.0000000")
您可以尝试Decimal.TryParse,特别是对于文本值。用户可以输入任何好值或坏值。
if(decimal.TryParse(..))
{
// success
}
另外,请尝试将小数格式化为字符串:
String sh = a.ToString("0.0000000");
点值(例如 double
) 表示为 string
时可以有两种分隔符:十进制一和千位分隔符。从string
千个 saparator 转换/解析时,将被忽略:
// notice, that "thousand" sparators not necessary separate thousands
"1,12,4567,8.93" -> 11245678.93d;
小数分隔符和千位分隔符都依赖于文化;因为在俄罗斯文化(Ru-ru
)中,千位分隔符是.
的,十进制是,
:
"0.000015" -> 00000015d == 15d
"5.21" -> 521d == 521d
在您的情况下,您可以指定区域性,例如 CultureInfo.InvariantCulture
其中,
是一千位分隔符,.
是十进制一。另一个建议是在用户输入上使用TryParse
而不是Convert
(如果用户输入,例如,"bla-bla-bla"
而不是有效值,我们应该做出适当的反应)
using System.Globalization;
...
if (!double.TryParse(textBoxMny.Text,
NumberStyles.Any,
CultureInfo.InvariantCulture,
out double mny))
textBox1win.Text = "Mny is not a vaid floating point value";
else if (!double.TryParse(textBoxMny.Text,
NumberStyles.Any,
CultureInfo.InvariantCulture,
out double winmultiplier))
textBox1win.Text = "winmultiplier is not a vaid floating point value";
else
textBox1win.Text = (mny * winmultiplier).ToString(CultureInfo.InvariantCulture);