我注意到我的双打包含不同的精确字符,具体取决于区域设置。
例如:
3,47
或3.45
如何强制执行double应始终包含.
精度字符?
问题是,一旦我将包含此double的类序列化为XML,它就会被发送到期望标准结果的其他系统。
所以在阅读了你的回复(并感谢)之后,你们是否建议将属性更改为字符串,(在字符串中进行替换),以便使用字符串值(而不是double)进行序列化?
答案 0 :(得分:15)
您需要使用Invariant Culture将双精度数放入字符串。
double d = 3.47;
Console.WriteLine(d.ToString(CultureInfo.InvariantCulture));
答案 1 :(得分:7)
您需要使用InvariantCulture格式化。
请注意“。”和“,”格式化字符are interpreted according to the culture settings。
答案 2 :(得分:2)
双重本身不包含“。”或“,”,只有表示的打印出来。您可以阅读自定义格式here。
[根据OP更新]
我不确切地知道你的设计是什么样的,但是在你的DTO上创建一个字符串属性可能是明智的,它会输出你的double的格式化字符串,然后将你的double属性标记为不可序列化。
答案 3 :(得分:2)
这个小教程将是您需要的答案,我希望: http://www.java2s.com/Tutorial/CSharp/0440__I18N-Internationalization/Parsingnumberswithcultureinvariantparsing.htm
double.Parse(numberString, CultureInfo.InvariantCulture);
答案 4 :(得分:0)
当您需要对当前应用程序中的所有数字执行此操作时,可以使用以下命令在应用程序范围内设置它(新线程将继承此设置):
// use this statement to force the default:
Application.CurrentCulture = CultureInfo.InvariantCulture;
string s = myNumber.ToString();
// for one number you have to remember to use:
string s = myNumber.ToString(CultureInfo.InvariantCulture);
注意:默认情况下,您的应用程序(无论是ASP.NET还是WinForms)将使用其运行的系统的区域性设置(在ASP.NET中,您可以在web.config
中全局设置区域性) 。