c# – 字符串“0.080”加倍使80.00
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 字符串“0.080”加倍使80.00,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3726字,纯文字阅读大概需要6分钟。
内容图文
![c# – 字符串“0.080”加倍使80.00](/upload/InfoBanner/zyjiaocheng/766/567819bb203f43c3bc3a9fcc9a4dc849.jpg)
参见英文答案 > How do I parse a string with a decimal point to a double? 18个
我在c#中遇到此问题,我想将字符串转换为double.
textBoxKostOnderhoud.Text = "0.08";
kost.OnderhoudKost = double.Parse(textBoxKostOnderhoud.Text);
这使我的数据库中的80.00,我不知道为什么.这个问题有什么解决方案吗?
这是我如何将我的值添加到数据库(mysql)
public bool insert(Kost kost)
{
string query = "INSERT INTO kost (wagenId, onderhoudKost, tolKost, bedrijfsVerzekering, autoVerzekering, ladingVerzekering, wegenBelasting, eurovignet, accountantKost, telefoonKost, documentenEnVergunningen, onvoorzien, overige, andere) VALUES('" + kost.WagenId + "', '" + kost.OnderhoudKost + "', '" + kost.TolKost + "', '" + kost.BedrijfsVerzekering + "', '" + kost.AutoVerzekering + "', '" + kost.LadingVerzekering + "', '" + kost.WegenBelasting + "', '" + kost.Eurovignet + "', '" + kost.AccountantKost + "', '" + kost.TelefoonKost + "', '" + kost.DocumentenEnVergunningen + "', '" + kost.Onvoorzien + "', '" + kost.Overige + "', '" + kost.Andere + "')";
if (this.OpenConnection())
{
//Create Command
MySqlCommand cmd = new MySqlCommand(query, connection);
//Create a data reader and Execute the command
cmd.ExecuteReader();
//close Connection
this.CloseConnection();
return true;
}
else
{
return false;
}
}
SQL
CREATE TABLE IF NOT EXISTS `kost` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`wagenId` int(11) NOT NULL,
`onderhoudKost` double(10,2) NOT NULL,
`tolKost` double(10,2) NOT NULL,
`bedrijfsVerzekering` double(10,2) NOT NULL,
`autoVerzekering` double(10,2) NOT NULL,
`ladingVerzekering` double(10,2) NOT NULL,
`wegenBelasting` double(10,2) NOT NULL,
`eurovignet` double(10,2) NOT NULL,
`accountantKost` double(10,2) NOT NULL,
`telefoonKost` double(10,2) NOT NULL,
`documentenEnVergunningen` double(10,2) NOT NULL,
`onvoorzien` double(10,2) NOT NULL,
`overige` double(10,2) NOT NULL,
`andere` double(10,2) NOT NULL,
PRIMARY KEY (`id`),
KEY `wagenId` (`wagenId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=64 ;
解决方法:
我怀疑你正在使用小数分隔符是“,”的文化,分组分隔符是“.”.
您可以指定解析时要使用的区域性:
double d = double.Parse(s, CultureInfo.InvariantCulture);
这是否合适取决于上下文,通常 – 字符串来自何处?如果是用户,你知道他们的文化是什么吗?如果它不是来自用户,数据源本身是文本的,还是有一种方法可以获得没有任何字符串转换的值?
请注意,如果这是货币值,您几乎肯定会使用十进制而不是双精度.
编辑:现在您已经包含了SQL,我们可以看到为什么值没有正确地传播到数据库:
// Note properly broken, but this is all on one line. (Ick to start with.)
string query = "INSERT INTO kost (wagenId, onderhoudKost, tolKost,
bedrijfsVerzekering, autoVerzekering, ladingVerzekering, wegenBelasting,
eurovignet, accountantKost, telefoonKost, documentenEnVergunningen, onvoorzien,
overige, andere) VALUES('" + kost.WagenId + "', '" + kost.OnderhoudKost + "', '"
+ kost.TolKost + "', '" + kost.BedrijfsVerzekering + "', '" +
kost.AutoVerzekering + "', '" + kost.LadingVerzekering + "', '" +
kost.WegenBelasting + "', '" + kost.Eurovignet + "', '" + kost.AccountantKost +
"', '" + kost.TelefoonKost + "', '" + kost.DocumentenEnVergunningen + "', '" +
kost.Onvoorzien + "', '" + kost.Overige + "', '" + kost.Andere + "')";
您将所有值转换为SQL中的字符串,并希望您的数据库将以相同的方式再次解析它们.碰巧,它不会 – 再次因为你的默认文化.
更重要的是,你在这里遇到了一个巨大的SQL injection攻击漏洞.
不要这样做.使用参数化SQL,将占位符放在SQL中,然后单独指定参数值.优点:
>防止SQL注入攻击
>通过将代码(SQL)与数据分离,使SQL语句更加清晰
>减少您最终完成的转化次数,因此您可以减少担心文化等的地方
请参阅您正在使用的MySQL驱动程序的文档,以获取用于参数的确切格式(我相信可能会有一些略有不同的形式,具体取决于驱动程序) – 但从根本上说,这适用于所有数据库访问,无论数据库是什么你正在和你正在使用的任何语言交谈.
内容总结
以上是互联网集市为您收集整理的c# – 字符串“0.080”加倍使80.00全部内容,希望文章能够帮你解决c# – 字符串“0.080”加倍使80.00所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。