文本框在乘以双精度变量时未显示真实结果



我正在编写一个关于将取自不同textboxes的两个双精度变量相乘并在另一个textbox显示结果的代码。但我无法得到正确的结果。

我的代码是:

double mny = Convert.ToDouble(textBoxMny.Text);
double winmultiplier = Convert.ToDouble(textBoxwinmultiplier.Text);
win1 = mny * winmultiplier;
textBox1win.Text = win1.ToString();

我给了mny = 0.000015winmultiplier 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);

最新更新