简体   繁体   English

十进制。解析方法

[英]decimal.Parse method

I just found a very weird Bug in my c# code, 我刚刚在我的C#代码中发现了一个非常奇怪的错误,

so there is a next: 所以有一个下一个:

when i´m trying to cast a object{string} to decimal like this : 当我试图像这样将对象{string}转换为十进制时:

item.ValiaFundo = row.IsNull("PL_FUNDO") ? 0 : decimal.Parse(row["PL_FUNDO"].ToString());

with the value of row = "2488.1987", it returns me 2488.1987 as supposed, but for some users returned value is 24881987. 使用row =“ 2488.1987”的值,它将按预期返回我2488.1987,但是对于某些用户,返回的值为24881987。

i fixed it changing a type of object my database return to object{decimal}, like this : 我修复了更改对象类型的问题,将数据库返回到对象{decimal},如下所示:

item.ValiaFundo = row.IsNull("PL_FUNDO") ? 0 : (decimal)row["PL_FUNDO"];

that casts a value well for any user, and i just want to understand why that bug happens? 可以为任何用户带来很好的价值,我只想了解为什么会发生该错误? What cause it? 是什么原因造成的? Does anyone have some ideas? 有人有想法吗?

PS: server and users regional settings is the same for both cases. PS:两种情况下服务器和用户的区域设置相同。

But, seems that data coming from server is already decimal in type. 但是,似乎来自服务器的数据已经是十进制类型。

It is a bad practice to go decimal --> string --> decimal. 十进制->字符串->十进制是不好的做法。

As Jon Skeet pointed out (his answer disappeared) in some cultures comma is a decimal point. 正如乔恩·斯基特(Jon Skeet)所指出的那样(他的回答消失了),逗号是小数点。 So when doing ToString() be careful about culture used. 因此,在执行ToString()时,请注意所使用的文化。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM