如何为双精度值定义字符串格式,使其显示值就像被除以一样?

问题描述 投票:0回答:2

假设我有一个

double = 99.00;
。如何定义一个字符串
format
,在使用
"0.099"
时会输出类似
double.ToString(format);
的字符串。正如你所看到的,我想格式化我的双精度,就好像它被
1000
除一样。

我知道我可以做这样的事情:

double number = 99.00;
string formattedNumber = (number / 1000).ToString("0.000");
Console.WriteLine(formattedNumber); // Output: "0.099" 

但是,有没有一种方法可以直接定义格式而不需要任何额外的计算?

c# .net string-formatting
2个回答
3
投票

您可以直接在小数点左侧使用 缩放格式化程序 (

,
) 将数字缩小 1,000:

double number = 99.00;
string formattedNumber = number.ToString("0,.000");
Console.WriteLine(formattedNumber); // Output: "0.099" 

您可以使用多个逗号按 1,000 次方缩放(例如

,,
将除以 1,000,000)

格式化程序通常用于以不同数量级显示数据(例如以数千或数百万显示数据以节省空间)

尽管除非您可以指定格式化字符串而不更改数据(例如在报告或表单中),否则我只会在显示之前缩放数字并使用标准格式化字符串。除非您经常使用,否则上面的格式化字符串对数字的缩放可能并不明显。


-1
投票
不幸的是,.NET 的 ToString 方法提供的标准数字格式字符串不允许您在格式化时直接将值除以常量。正如您所提到的,您可以通过除法然后格式化来实现所需的输出。

但是,如果您想避免额外的计算,您可以创建一个封装此逻辑的自定义格式化函数。以下是如何执行此操作的示例:

static string FormatAsDividedBy(double value, double divisor, string format) { double formattedValue = value / divisor; return formattedValue.ToString(format); }
在此示例中,FormatAsDividedBy 函数采用原始数字、除数(在您的例子中为 1000)和所需的格式。它在内部执行除法,然后使用提供的格式字符串格式化结果。这种方法将计算封装在函数中,并允许您使用所需的格式,而无需每次都手动执行除法。

使用该功能

double number = 99.00; string formattedNumber = FormatAsDividedBy(number, 1000, "0.000"); Console.WriteLine(formattedNumber); // Output: "0.099"
    
© www.soinside.com 2019 - 2024. All rights reserved.