十进制ToString F02变为逗号

时间:2016-09-20 15:49:24

标签: c# tostring

如果我打开控制台应用程序并运行它:

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

为什么呢?十进制只是一个值,对吗?它不是一个带有一些隐藏属性的引用对象,可能已被某些文化信息损坏了......对吗?

2 个答案:

答案 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)

如何配置web.config

<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>

或您希望字符串格式化的文化。