【问题标题】:Splitting float拆分浮动
【发布时间】:2011-12-14 06:56:10
【问题描述】:

我有一个浮点数 = 1.30452F

对于我的 WPF UI,我需要将浮动分成三个部分:

  • 第 1 部分:1.30
  • 第 2 部分:45
  • 第 3 部分:2

一个可行的解决方案是:

float myFloat = 1.30452F;

string part1 = myFloat.ToString("0.00");
string part2 = myFloat.ToString().Substring(4,2);
string part3 = myFloat.ToString().Substring(6);

有没有人有更性能优雅分割浮动的方式?

【问题讨论】:

  • 如果您对十进制值感兴趣,您是否考虑过改用十进制类型?
  • 具体来说 - 您想要小数点前的数字(顺便说一下,这可以是多少位?),然后是两个有效数字,然后是这两个有效数字之外的所有数字?
  • 它也将是:0.00000 或 0.0000。浮动对我来说是一个不错的选择。我不需要更多

标签: c# algorithm optimization


【解决方案1】:

稍微改进(尽管使用相同的方法)会减少您的字符串操作。我运行了你的原始代码 100 万次,并在上面做了一个计时器,大约是 890 毫秒。此更改将其降至 328 毫秒。一个不错的改进。

string myString = myFloat.ToString();
string part1 = myString.Substring(0, 4);
string part2 = myString.Substring(4, 2);
string part3 = myString.Substring(6);

我假设您想要的不仅仅是第 1 部分的前 4 个字符。这是一个数学版本。而这个运行时间为 31 毫秒。

float part1 = (int)(myFloat * 100F) / 100F;
int part2 = (int)((myFloat - part1) * 10000F);
int part3 = (int)((myFloat - part1 - (part2 / 10000F)) * 100000);

【讨论】:

  • +1- 我的第一个想法是强制转换与字符串解析。需要对其进行测试以确保乘法不会改变实际值(因为浮点数在操作时可能会略有不同)。
  • 我确保在转换之前的数学运算中只使用浮点数,并且在提交之前我自己测试了一些不同的值。但是,我同意,有必要进行进一步的测试。测试总是好的!
  • 谢谢安迪 :) 我会继续测试 ;)
猜你喜欢
  • 2016-12-10
  • 2016-07-20
  • 2021-11-17
  • 2018-01-03
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 1970-01-01
相关资源
最近更新 更多