十进制 ToString F02 变成逗号
Decimal ToString F02 becomes Comma
如果我打开一个控制台应用程序并且运行这个:
decimal urmom = 84.3400m;
Console.WriteLine(urmom.ToString("F02"));
我得到84.34
在我 运行ning 的 Web 应用程序中,我有以下代码:
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鼠标悬停显示84.34
.
为什么? decimal 只是一个值,对吧?它不是具有某些可能已被某些文化信息损坏的隐藏属性的参考对象...对吗?
您得到这些结果是因为两种环境中的文化不同。试试这个:
encoder["PAYMENTREQUEST_0_AMT"] = total.ToString("F02", System.Globalization.CultureInfo.InvariantCulture);
或您希望将字符串格式化为的任何文化。
这与运行 的线程文化有关。如果你想获得 en-US 格式的字符串而不考虑线程,那么你需要将特定的区域性传递给 ToString。如果它 运行 在 Web 服务器下并且您想忽略请求 browser/client 的文化,您还可以在 web.config.
中指定静态文化
如何在 ToString
中指定文化
var formatted1 = total.ToString("F02", System.Globalization.CultureInfo.InvariantCulture);
// or
var formatted2 = total.ToString("F02", new System.Globalization.CultureInfo("en-US"));
见Decimal.ToString Method (String,IFormatProvider)
如何配置web.config
<globalization uiCulture="en" culture="en-US" />
另见 How to: Set the Culture and UI Culture for ASP.NET Web Page Globalization
Why? decimal is just a value, right?
不,您正在将小数转换为字符串,并且根据区域性,代表小数的字符串可能会以不同方式显示。例如:在荷兰,逗号用于将整个值与值的 partial/fractional 部分分隔开,句点 (.) 用于分隔分组,如千、百万、十亿、万亿等。在美国这些符号的含义完全相反。
检测调用者的文化通常是一件好事,return根据调用者的文化格式化数据通常也是需要的行为。如果不是,那么请参阅上面的 2 种方法来确保代码始终 return 一致的格式化数据。
如果我打开一个控制台应用程序并且运行这个:
decimal urmom = 84.3400m;
Console.WriteLine(urmom.ToString("F02"));
我得到84.34
在我 运行ning 的 Web 应用程序中,我有以下代码:
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鼠标悬停显示84.34
.
为什么? decimal 只是一个值,对吧?它不是具有某些可能已被某些文化信息损坏的隐藏属性的参考对象...对吗?
您得到这些结果是因为两种环境中的文化不同。试试这个:
encoder["PAYMENTREQUEST_0_AMT"] = total.ToString("F02", System.Globalization.CultureInfo.InvariantCulture);
或您希望将字符串格式化为的任何文化。
这与运行 的线程文化有关。如果你想获得 en-US 格式的字符串而不考虑线程,那么你需要将特定的区域性传递给 ToString。如果它 运行 在 Web 服务器下并且您想忽略请求 browser/client 的文化,您还可以在 web.config.
中指定静态文化如何在 ToString
中指定文化
var formatted1 = total.ToString("F02", System.Globalization.CultureInfo.InvariantCulture);
// or
var formatted2 = total.ToString("F02", new System.Globalization.CultureInfo("en-US"));
见Decimal.ToString Method (String,IFormatProvider)
如何配置web.config
<globalization uiCulture="en" culture="en-US" />
另见 How to: Set the Culture and UI Culture for ASP.NET Web Page Globalization
Why? decimal is just a value, right?
不,您正在将小数转换为字符串,并且根据区域性,代表小数的字符串可能会以不同方式显示。例如:在荷兰,逗号用于将整个值与值的 partial/fractional 部分分隔开,句点 (.) 用于分隔分组,如千、百万、十亿、万亿等。在美国这些符号的含义完全相反。
检测调用者的文化通常是一件好事,return根据调用者的文化格式化数据通常也是需要的行为。如果不是,那么请参阅上面的 2 种方法来确保代码始终 return 一致的格式化数据。