繁体   English   中英

从Variant String转换为Double忽略小数点

Cast from Variant String to Double ignores decimal point

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有几行简单的代码:

var
  vRecordValue:Double;
begin
  vRecordValue:= someVariant;

someVariant是一个字符串(类型256)。

在生产系统上,我们有'23 .4'的变体,vRecordValue变为234.我只能重现这是我的系统分隔符是','。 在我们的生产系统中,情况确实如此,但我们已经改变了设置,但仍然看到了这种情况。 值得注意的是,除了调试模式之外我们无法重现这一点(不知道这里的关系是什么),并且做了一个简单的测试。

我通过显式转换修复了这个问题:

vRecordValue:= StrToFloatDef(VarToStrDef(someVariant, '0'), 0);

问题:

  1. 有没有其他方法可以忽略小数点?
  2. 有人可以提供一个参考,说明如何执行从字符串到双精度的默认转换? 我想了解其中的差异。
  3. 有没有什么方法可以在首次运行代码时从值中缓存默认转换中使用的分隔符? ......怀疑但绝望地理解。

谢谢,

韦恩。

2 个回复

这是您的区域设置

为了测试它,我做了这个samall演示应用程序:

procedure TForm60.FormCreate(Sender: TObject);
var
  vRecordValue: Double;
  sRecordValue: Variant;
begin
  sRecordValue:= '23.4';
  vRecordValue:= StrToFloatDef(VarToStrDef(sRecordValue, '0'), 0);
  ShowMessage(FloatToStr(vRecordValue));

  sRecordValue:= '23,4';
  vRecordValue:= StrToFloatDef(VarToStrDef(sRecordValue, '0'), 0);
  ShowMessage(FloatToStr(vRecordValue));
end;

在丹麦(我住的地方)我们使用,作为十进制分隔符,所以最后一个给我正确的结果

关于我的第三个问题。 这个问题本周再次出现。 我没有意识到只为当前用户设置了区域设置/区域设置。

要复制系统用户的设置,我们需要使用:

控制面板>区域和语言>管理>复制设置。

这就是我在测试时遇到不一致的原因。 它取决于我的应用程序运行的用户和用户设置。

2 为什么忽略小数点?

所以我正在研究这个小复利计算器,但我遇到了一个我不知道如何解决的问题! 出于某种原因,python 似乎并不关心数字中有小数这一事实。 例如,如果代码中的数字是 12588.01,则它被视为 12588。非常感谢任何帮助! 这个计算器正在处理货币,因此应该四舍五入,但是在我尝试修复代码的过程中, ...

3 为什么Float转换忽略小数点后的零?

我不知道浮动数据类型为什么忽略.00。 喜欢 我想显示如果浮点长度小于5,然后在数字末尾添加零,如165然后它将显示165.00(我使用浮点数据类型) 任何的想法? ...

2014-01-01 10:49:33 4 803   c#/ c#-4.0
4 浮点比较忽略小数点

嗨,我有以下代码: 因此,如果altitude高(约69077),它应该进入其他分支。 现在这实际上有效,直到altitude失去一个有效数字(例如从10000切换到9990)。 然后它开始进入else分支,直到altitude低于atmo十分之一。 当高度从1000切换到990时 ...

2013-11-10 17:33:02 1 40   bash
5 转换为 BigDecimal 时,输入类型 =“数字”的 Spring 和 Thymeleaf 形式忽略小数点分隔符

在input type="number"提交十进制数的 html 表单上,小数点分隔符(无论我使用逗号还是句点)都被忽略了。 要获得正确的值,我需要将输入字段更改为type="text" 。 示例:当我在表单中提交值“0.01”时,它会转换为“1”。 HTML表单: 弹簧控制器: J ...

7 float.TryParse忽略小数点

我在Windows上使用Visual Studio代码,并使用最新的asp.net核心创建了mvc应用。 当我运行此代码时: 我得到结果= true,表示解析成功,但实际的convertNumber = 1389; 我尝试了不同的文化,不同的数字样式,但我一无所获。 我会明 ...

9 parseFloat 忽略小数点后的字符

我希望我的函数将字符串或数字格式化为小数点后 X 位的十进制数。 我的问题是,当我将3.0004传递给我的函数时,我得到3 。 我已经阅读了文档,似乎每当parseFloat找到一个. 例如 它返回该字符之前的值,忽略无效字符和其后的字符。 我知道它会这样做,但是我如何返回3.00呢? 我希 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM