c# – 字符串“0.080”加倍使80.00

c# – 字符串“0.080”加倍使80.00,第1张

概述参见英文答案 > How do I parse a string with a decimal point to a double?                                    18个 我在c#中遇到此问题,我想将字符串转换为double. textBoxKostOnderhoud.Text = "0.08";kost.OnderhoudKost = double.P 参见英文答案 > 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注入攻击
>通过将代码(sql)与数据分离,使SQL语句更加清晰
>减少您最终完成的转化次数,因此您可以减少担心文化等的地方

请参阅您正在使用的MysqL驱动程序的文档,以获取用于参数的确切格式(我相信可能会有一些略有不同的形式,具体取决于驱动程序) – 但从根本上说,这适用于所有数据库访问,无论数据库是什么你正在和你正在使用的任何语言交谈.

总结

以上是内存溢出为你收集整理的c# – 字符串“0.080”加倍使80.00全部内容,希望文章能够帮你解决c# – 字符串“0.080”加倍使80.00所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1225955.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存