【问题标题】:String.Format(new CultureInfo("el-GR"), "{0:#,,0.00}", value) change output to 0 if value=NaNString.Format(new CultureInfo("el-GR"), "{0:#,,0.00}", value) 如果 value=NaN 则将输出更改为 0
【发布时间】:2021-05-09 20:16:24
【问题描述】:

是否可以在以下行中
<td>@String.Format(new CultureInfo("el-GR"), "{0:#,,0.00}", value)</td>
操作输出,所以如果值为 NaN 或无穷大返回 0?

提前感谢您的帮助。
问候

【问题讨论】:

标签: c# asp.net asp.net-mvc


【解决方案1】:

我不会评判你想在这里做什么的好坏

来自msdn

无论格式字符串如何,如果 Single 或 Double 浮点类型的值是正无穷大、负无穷大或不是数字 (NaN),则格式化字符串是相应 PositiveInfinitySymbol、NegativeInfinitySymbol 或当前适用的 NumberFormatInfo 对象指定的 NaNSymbol 属性。

因此,正如 here 建议的那样,您可以重新配置您的 CultureInfo 以使用您想要的 NaNPositiveInfinityNegativeInfinity 的任何字符串表示形式,但请注意它们是 string 值,所以它们不会t 格式为0,00。你可以清楚地将它们的字符串值设置为0,00"0,00"一个合法的string值),像这样:

public static readonly CultureInfo GreekCultureInfoWithoutNanInfinity0dot00 = CreateCultureInfoWithoutNanInfinity("gr-GR", "0.00");

private static CultureInfo CreateCultureInfoWithoutNanInfinity(string name, string format)
{
    var ci = new CultureInfo(name);

    string num = (0d).ToString(format, ci);

    ci.NumberFormat.PositiveInfinitySymbol = num;
    ci.NumberFormat.NegativeInfinitySymbol = num;
    ci.NumberFormat.NaNSymbol = num;

    return ci;
}

然后在您想将数字格式化为希腊格式"0.00" 时,使用GreekCultureInfoWithoutNanInfinity0dot00 作为文化,

或者你可以直接新建一个

public static string FormatNoNaN(IFormatProvider provider, string format, double obj1)

您在哪里处理NaNPositiveInfinityNegativeInfinity 的“特殊情况”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2020-03-24
    • 2012-04-03
    相关资源
    最近更新 更多