我需要一种将浮点数向下舍入到特定小数位数的方法。Math.Round
如果剪切后的数字大于 6,将四舍五入,并且Math.Floor
不适用于小数位。
基本上,如果我有2.566321
,我希望代码返回2.56
。我知道可以做到这一点的唯一方法是将浮点数转换为字符串并使用string.format
,但如果可能的话,我宁愿不这样做。
谢谢。
我需要一种将浮点数向下舍入到特定小数位数的方法。Math.Round
如果剪切后的数字大于 6,将四舍五入,并且Math.Floor
不适用于小数位。
基本上,如果我有2.566321
,我希望代码返回2.56
。我知道可以做到这一点的唯一方法是将浮点数转换为字符串并使用string.format
,但如果可能的话,我宁愿不这样做。
谢谢。
蛮力的方法可能是乘以 10^n ,其中n
是您想要的小数位数,转换为 int (截断而不是舍入),然后转换回浮点数并再次除以 10^n。
视觉上:
2.566321 * 10^2 = 2.566321 * 100 = 256.6321
(int) 256.6321 = 256
(float) 256 / 10^2 = (float) 256 / 100 = 2.56
快速尝试代码:
public float Truncate(float value, int decimalPlaces) {
int temp = (int) (value * Math.Pow(10, decimalPlaces));
return (float) temp / Math.Pow(10, decimalPlaces);
}
我还没有测试过这个,但这应该让你去。