如何防止decimal.TryParse将","转换为"."?

Mik*_*Del 1 c# parsing

这是我的代码:

string myValue = "0,203";

decimal.TryParse(myValue, NumberStyles.Any, CultureInfo.CurrentCulture, out myValueAsDecimal;
Run Code Online (Sandbox Code Playgroud)

...

myValueAsDecimal is 0.203 now
Run Code Online (Sandbox Code Playgroud)

有没有可能myValueAsDecimal有0,203之后TryParse或内部表示decimal总是0.203我需要格式化GUI输出,如果我需要0,203?

Jon*_*eet 6

在TryParse之后myValueAsDecimal有可能有0,203

不,它只是一个数字 - 它没有文本格式的概念.要以更简单的类型考虑另一种方式,请考虑以下两行代码:

int x = 0x100;
int y = 256;
Run Code Online (Sandbox Code Playgroud)

这两个值是否相同?是的,它们代表相同的数字.如果转换的值x,并y默认为字符串,他们都将最终成为"256" -但他们都最终成为"100",如果你请求一个十六进制表示.

区分变量的实际值和文本表示很重要.很少有类型(我无法立即考虑)携带有关文本表示的信息 - 例如,a DateTime可以从各种格式解析,但没有原始文本格式的"记忆".它只是一个日期和时间,然后可以根据任何格式进行格式化.

如果你需要保持"十进制数和它最初表示的文化"的想法,那么你应该为该配对创建自己的类或结构.它decimal本身并不存在.