lua和C#中函数string.format处理浮点数时的区别

在之前的工作中,写lua和C#时出现了一个比较奇怪的问题。在处理浮点数时,lua和C#得到了不一样的结果。

在lua中:
	local x = -0.00000000000000562
	print("-------------||"..string.format("%.3f", x))
	---->-------------||-0.000

在C#中:
	var x = -0.00000000000000562;
	Console.WriteLine("--------------||{0}", string.Format("{0:F3}", x));
	---->-------------||0.000

相信大家已经看出问题来了,在lua中通过string.format对浮点数字进行处理时,是直接截取相应的位数,简单来说就是按照字符串取处理,而不是数字;在C#中则不同,C#会去按照浮点数应有的计算去保留相应的有效数字。

后面为基础用法:

LUA

在lua中,函数string.format是用来对字符串进行格式化,第一个参数为格式化串:由指示符和控制格式的字符组成。
指示符后的控制格式的字符可以为:十进制'd';十六进制'x';八进制'o';浮点数'f';字符串's'。
在指示符'%'和控制格式字符之间还可以有其他的选项:用来控制更详细的格式。常用的控制格式如下:

	print(string.format("十进制:(%d)",10)) --常规
	---->十进制:(10)
	print(string.format("十进制:(%2d)",1)) --最少保留两位,不足两位左边用空格补齐
	---->十进制:( 1)
	print(string.format("十进制:(%02d)",1))--最少保留两位,不足两位左边用0补齐
	---->十进制:(01)
	print(string.format("浮点数:(%f)",1)) --常规,保留6位小数
	---->十进制:(1.000000)
	print(string.format("浮点数:(%.2f)",1)) --保留2位小数
	---->十进制:(1.00)
	print(string.format("字符串:(%s)","1")) 
	---->字符串:(1)

C#

	C# 中函数string.format对字符串的格式化

		print(string.Format("{0:P}", 0.12345));//12.35 %百分数
		print(string.Format("{0:P1}", 0.12345));//12.3 %
		print(string.Format("{0:P0}", 0.12345));//12 %
		print(string.Format("{0:D2}:{1:D2}:{2:D2}", 12, 3, 45));//12:03:45 十进制数。
		print(string.Format("{0:F2}", 12.345));//12.35小数
		print(string.Format("{0:F1}", 12.345));//12.3

你可能感兴趣的:(记录)