如果我打开控制台应用程序并运行它:
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");
//...
}
即使我在执行该行之前中断并在Watch
上执行total.ToString("F02")
,我也会获得84,34
。参数列表中的鼠标悬停总数显示为84.34
。
为什么呢?十进制只是一个值,对吗?它不是一个带有一些隐藏属性的引用对象,可能已被某些文化信息损坏了......对吗?
答案 0 :(得分:1)
它与正在运行的线程的文化有关。如果你想获得在en-US中格式化的字符串而不管线程如何,那么你需要将特定的文化传递给ToString。如果它在Web服务器下运行并且您想要忽略请求浏览器/客户端的文化,您还可以在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)
<globalization uiCulture="en" culture="en-US" />
另见How to: Set the Culture and UI Culture for ASP.NET Web Page Globalization
为什么呢?十进制只是一个值,对吧?
不,您将十进制转换为字符串,并且根据文化,表示小数的字符串可能会以不同方式显示。例如:在荷兰,逗号用于将整个值与值的部分/小数部分分开,句点(。)用于分隔数千,数百万,数十亿,特里利亚等分组。在美国这些符号具有完全相反的含义。
检测调用者的文化通常是一件好事,并且返回基于调用者文化格式化的数据通常也是期望的行为。如果没有,那么请参阅上面的两种方法,以确保代码始终返回一致的格式化数据。
答案 1 :(得分:0)
您获得这些结果是因为两种环境中的文化不同。试试这个:
<div class="hidden-sm hidden-md hidden-lg"></div>
或您希望字符串格式化的文化。