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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值