gpt4 book ai didi

c# - String.Format - 如何格式化为 x 位数字(不考虑小数位)?

转载 作者:可可西里 更新时间:2023-11-01 08:27:35 27 4
gpt4 key购买 nike

我需要将 float 格式化为 x 个字符(在我的例子中是 6 个字符,包括小数点)。我的输出还需要包含数字的符号

给定输入,这里是预期的输出

1.23456   => +1.2345

-12.34567 => -12.345

-0.123456 => -0.1234

1234.567 => +1234.5

请假设最后一个字符前始终有一个小数位。 IE。不会有 12345.6 数字输入 - 输入总是小于或等于 9999.9

我认为这必须有条件地完成。

最佳答案

您提到“x 个字符”。所以我们可以将其简化为“x-1 位数字”,并且只需编写显示 x 位数字的代码即可。

我认为将 "G" numeric format specifier 传递给 Double.ToString() 尽可能接近内置。

double d = 1234.56789;
string s = d.ToString("G6"); // "1234.57"

所以我们只是扩展它以在前面手动添加“+”:

if (d > 0)
s = "+" + s;

将它们放在一个扩展方法中:

编辑:包括要截断的可选参数

public static string ToStringWithSign(this double d, int digits, bool truncate = false)
{
if (truncate) {
double factor = Math.Pow(10, digits - 1);
d = Math.Truncate(d * factor) / factor;
}

string s = d.ToString("G" + digits);
if (d > 0)
s = "+" + s;
return s;
}

结果:

(1234.56789).ToStringWithSign(4);      // "+1235"
(1234.56789).ToStringWithSign(5); // "+1234.6"
(1234.56789).ToStringWithSign(6); // "+1234.57"
(-1234.56789).ToStringWithSign(6); // "-1234.57"

(1.2345678).ToStringWithSign(6); // "+1.23457"
(1.2345678).ToStringWithSign(6, true); // "+1.23456"

关于c# - String.Format - 如何格式化为 x 位数字(不考虑小数位)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11789194/

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