去除尾随零和小数点 [英] Strip trailing zeroes and decimal point

查看:115
本文介绍了去除尾随零和小数点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用Lua,我将数字格式化为可变数量的数字,并去除结尾的零/小数点之类的

With Lua, I'm formatting numbers to a variable number of digits and strip trailing zeroes/decimal points like

string.format(" %."..precision.."f", value):
  gsub("(%..-)0*$", "%1"):
  gsub("%.$", "")

值是数字类型(正,负,整数,小数).

Value is of type number (positive, negative, integer, fractional).

因此任务得以解决,但是出于美学,教育和性能方面的原因,我有兴趣了解是否存在一种更优雅的方法-可能仅使用一个gsub().

So the task is solved, but for aesthetic, educational and performance reasons I'm interested in learning whether there's a more elegant approach - possibly one that only uses one gsub().

%g是不可选择的,因为要避免科学计数法.

%g in string.format() is no option as scientific notation is to be avoided.

推荐答案

如果您的精度始终> 0,则保证尾随字符是浮点数的0序列或.的后跟序列用于整数.因此,您可以识别并剥离此预告片",而其余字符串保留为:

If your precision is always > 0, then trailing characters are guaranteed to be either sequence of 0 for floats or . followed by sequence of 0 for integers. Therefore you can identify and strip this "trailer", leaving rest of the string with:

string.format(" %."..precision.."f", value)
   :gsub("%.?0+$", "")

它不会破坏以0结尾的整数,因为整数在有效零之后会具有浮点,因此它们不会在字符串末尾被"0的序列"捕获.

It won't mangle integers ending in 0 because those would have float point after significant zeros so they won't get caught as "sequence of 0 right before end of string.

如果precision为0,则根本不执行gsub.

If precision is 0, then you should simply not execute gsub at all.

这篇关于去除尾随零和小数点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆