c# – 字符串“0.080”加倍使80.00
参见英文答案 >
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,`bedrijfsVerzekering` double(10,`autoVerzekering` double(10,`ladingVerzekering` double(10,`wegenBelasting` double(10,`eurovignet` double(10,`accountantKost` double(10,`telefoonKost` double(10,`documentenEnVergunningen` double(10,`onvoorzien` double(10,`overige` double(10,`andere` double(10,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,'" + kost.TolKost + "','" + kost.AutoVerzekering + "','" + kost.WegenBelasting + "','" + kost.AccountantKost + "','" + kost.Onvoorzien + "','" + kost.Andere + "')"; 您将所有值转换为SQL中的字符串,并希望您的数据库将以相同的方式再次解析它们.碰巧,它不会 – 再次因为你的默认文化. 更重要的是,你在这里遇到了一个巨大的SQL injection攻击漏洞. 不要这样做.使用参数化SQL,将占位符放在SQL中,然后单独指定参数值.优点: >防止SQL注入攻击 请参阅您正在使用的MySQL驱动程序的文档,以获取用于参数的确切格式(我相信可能会有一些略有不同的形式,具体取决于驱动程序) – 但从根本上说,这适用于所有数据库访问,无论数据库是什么你正在和你正在使用的任何语言交谈. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |