【发布时间】:2016-09-20 15:49:23
【问题描述】:
如果我打开一个控制台应用程序并运行它:
decimal urmom = 84.3400m;
Console.WriteLine(urmom.ToString("F02"));
我收到84.34
在我正在运行的网络应用程序中,我有以下代码:
public static string PayPalJunk(string successURL, string failureURL, decimal total, string currency)
{
NVPCodec encoder = new NVPCodec();
encoder["PAYMENTREQUEST_0_AMT"] = total.ToString("F02");
//...
}
即使我在执行该行之前中断并在total.ToString("F02") 上执行Watch,我也会得到84,34。参数列表中total的Mouseover显示84.34。
为什么?十进制只是一个值,对吗?它不是具有某些可能已被某些文化信息破坏的隐藏属性的引用对象……对吗?
【问题讨论】:
-
网络服务器的默认文化是什么?
-
“为什么?” -- “为什么”是什么?
decimal是“只是一个值”,是的。但是,除非您阅读二进制十进制格式,否则您唯一看到decimal值的时候,它会从其实际值转换为文本,并且这种转换取决于执行转换。ToString()方法默认使用环境的文化,当环境的文化不同时,你会得到不同的结果。那么,你的问题是什么?您的调试器使用调试器的环境设置向您显示值,而 Web 服务器使用其显示值。 -
有关相关讨论,请参阅 stackoverflow.com/questions/30889114/…、stackoverflow.com/questions/33552847/… 以及 Stack Overflow 上的许多其他类似问题。