gpt4 book ai didi

c# - 十进制 ToString F02 变成逗号

转载 作者:太空宇宙 更新时间:2023-11-03 12:39:21 27 4
gpt4 key购买 nike

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

decimal urmom = 84.3400m;
Console.WriteLine(urmom.ToString("F02"));

我得到 84.34

在我运行的 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 只是一个值,对吧?它不是具有某些隐藏属性的引用对象,这些属性可能已被某些文化信息损坏……对吗?

最佳答案

它与正在运行的线程的文化有关。如果你想获得 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


Why? decimal is just a value, right?

不,您正在将小数转换为字符串,并且根据区域性,表示小数的字符串可能会以不同的方式显示。例如:在荷兰,逗号用于将整数值与值的部分/小数部分分开,句点 (.) 用于分隔分组,如千、百万、十亿、万亿等。在美国,这些符号具有完全相反的含义。

检测调用者的文化通常是一件好事,返回基于调用者文化格式化的数据通常也是需要的行为。如果不是,请参阅上面的 2 种方法以确保代码始终可以返回一致的格式化数据。

关于c# - 十进制 ToString F02 变成逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39598579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com